如何解决POST 中的 JSON 正文使用 Rust reqwest Crate
我正在尝试使用 Rust crate reqwest 实现这个 curl
调用:
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 代码时在响应中收到“格式错误的请求有效负载”错误消息。不幸的是,我无法控制该网站,因此无法在那里对其进行调试。
我的问题是:我做错了什么吗?如果没有明显问题,我应该尝试哪些选项(例如,附加标题)? (当然,我已经尝试了一些东西,但没有任何效果)
解决方法
从 the documentation for .json()
我们可以看到它需要一个任意的 serde 可序列化类型。这表明它正在做的是从给定值创建 JSON 文本。因此,您正在向服务器发送一个包含 JSON 的 JSON 引用字符串,这可能不是它所期望的。
我没有使用过 reqwest
,但对于您使用 JSON 字符串的用例,您可以使用 .body()
来提供字符串并使用 .header()
来指定 JSON内容类型。
事实证明,当 fn json<T: Serialize>(&mut self,json: &T) -> &mut RequestBuilder
参数只是 JSON 形式的字符串(切片)时,函数 json
无法按预期工作。
当传入包含与 JSON 字符串完全相同的信息的 struct
时,代码会起作用。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。