4

我正在尝试curl使用 Rust crate reqwest来实现这个调用:

curl -u [USERNAME]:[PASSWORD] -H "Content-Type: application/json" -d @content.json [WEBSITE]

content.json顾名思义,该文件对 JSON 对象进行编码。

我的代码如下所示:

fn get_response() -> Result<String, Box<dyn Error>> {
    let content = std::fs::read_to_string("content.json").unwrap();
    let client = reqwest::blocking::Client::new();
    client
        .post([WEBSITE])
        .basic_auth([USERNAME], Some([PASSWORD]))
        .json(&content)
        .send()?
        .text()?

虽然该curl命令有效,但在运行 Rust 代码时,我在响应中收到“格式错误的请求有效负载”错误消息。不幸的是,我无法控制该网站,因此无法在那里进行调试。

我的问题是:我做的事情明显错了吗?如果没有明显的问题,我应该尝试哪些选项(例如,附加标题)?(当然,我已经尝试了一些东西,但没有任何效果)

4

2 回答 2

5

文档中.json()我们可以看到它需要一个任意的 serde 可序列化类型。这表明它正在从给定值创建JSON 文本。因此,您正在向服务器发送一个包含 JSON 的 JSON 引用字符串,这可能不是它所期望的。

我没有使用过reqwest,但对于您的使用 JSON 字符串的用例,您将使用它.body()来提供字符串并.header()指定 JSON Content-Type。

于 2021-03-11T19:32:27.913 回答
0

事实证明,当参数只是 JSON 形式的字符串(切片)时,该函数fn json<T: Serialize>(&mut self, json: &T) -> &mut RequestBuilder无法按预期工作。json当传入struct包含与 JSON 字符串完全相同的信息的 a 时,代码可以正常工作。

于 2021-03-11T20:08:57.873 回答