JSON Body 在 POST 使用 Rust reqwest Crate
JSON Body in POST Using the Rust reqwest Crate
我正在尝试使用 Rust crate reqwest:
实现此 curl
调用
curl -u [USERNAME]:[PASSWORD] -H "Content-Type: application/json" -d @content.json [WEBSITE]
文件 content.json
编码 JSON object 顾名思义。
我的代码如下所示:
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 代码时,我在响应中收到“格式错误的请求负载”错误消息。不幸的是,我无法控制该网站,所以我无法在那里进行调试。
我的问题是:我做错了什么吗?如果没有明显的问题,我应该尝试哪些选项(例如,附加 headers)?
(当然,我已经尝试了一些东西,但没有任何效果)
从 the documentation for .json()
我们可以看到它需要一个任意的 serde 可序列化类型。这表明它所做的是根据给定值 创建 JSON 文本。因此,您正在向服务器发送一个包含 JSON 的 JSON 引号字符串,这可能不是它所期望的。
我没有使用过 reqwest
,但对于使用 JSON 字符串的用例,您应该使用 .body()
来提供字符串和 .header()
指定 JSON 内容类型。
事实证明,当 json
参数只是 JSON 形式的字符串(切片)时,函数 fn json<T: Serialize>(&mut self, json: &T) -> &mut RequestBuilder
无法正常工作。
当传入包含与 JSON 字符串完全相同的信息的 struct
时,代码有效。
我正在尝试使用 Rust crate reqwest:
实现此curl
调用
curl -u [USERNAME]:[PASSWORD] -H "Content-Type: application/json" -d @content.json [WEBSITE]
文件 content.json
编码 JSON object 顾名思义。
我的代码如下所示:
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 代码时,我在响应中收到“格式错误的请求负载”错误消息。不幸的是,我无法控制该网站,所以我无法在那里进行调试。
我的问题是:我做错了什么吗?如果没有明显的问题,我应该尝试哪些选项(例如,附加 headers)? (当然,我已经尝试了一些东西,但没有任何效果)
从 the documentation for .json()
我们可以看到它需要一个任意的 serde 可序列化类型。这表明它所做的是根据给定值 创建 JSON 文本。因此,您正在向服务器发送一个包含 JSON 的 JSON 引号字符串,这可能不是它所期望的。
我没有使用过 reqwest
,但对于使用 JSON 字符串的用例,您应该使用 .body()
来提供字符串和 .header()
指定 JSON 内容类型。
事实证明,当 json
参数只是 JSON 形式的字符串(切片)时,函数 fn json<T: Serialize>(&mut self, json: &T) -> &mut RequestBuilder
无法正常工作。
当传入包含与 JSON 字符串完全相同的信息的 struct
时,代码有效。