我正在学习Rust,并且认为构建一个CLI与File.io API共享文件非常方便。
为此,我尝试使用reqwest发送File.io docs中所述的请求:
# from file.io doc -> works fine
$ curl --data "text=this is a secret pw" https://file.io
> {"success":true,"key":"zX0Vko","link":"https://file.io/zX0Vko","expiry":"14 days"}
当我运行以下代码时,我得到400响应。标题可能有问题?我尝试查看curl文档,以找出可能会丢失的内容,但是我很困惑。
任何帮助将不胜感激。
我的代码:
extern crate reqwest;
fn main() {
let client = reqwest::Client::new();
let res = client.post("https://file.io/")
.body("text=this is a practice run")
.send();
println!("{:?}", res);
}
预期的响应:
{"success":true,"key":"SOME_KEY","link":"SOME_LINK","expiry":"14 days"}
实际反应:
Ok(Response { url: "https://file.io/", status: 400, headers: {"date": "Wed, 06 Feb 2019 03:40:35 GMT", "content-type": "application/json; charset=utf-8", "content-length": "64", "connection": "keep-alive", "x-powered-by": "Express", "x-ratelimit-limit": "5", "x-ratelimit-remaining": "4", "access-control-allow-origin": "*", "access-control-allow-headers": "Cache-Control,X-reqed-With,x-requested-with", "etag": "W/\"40-SEaBd3tIA9c06hg3p17dhWTvFz0\""} })
答案 0 :(得分:2)
您的请求不相同。 curl --data
表示您正在尝试发送内容类型为“ x-www-form-urlencoded”或类似内容的HTML表单,而代码中的这一行
.body("text=this is a practice run")
表示“仅是文本”。您应该按照here
的说明使用ReqwestBuilder::form
答案 1 :(得分:0)
收到400错误代码的主要原因是您的请求不正确。
此错误代码会提示您有关服务器未接受该请求的语法。
由于您以x-www-form-urlencoded
的身分发送邮件,因此您需要将发布请求更改为以下内容:
fn main() {
let client = reqwest::Client::new();
let mut params = HashMap::new();
params.insert("text", "This is a practice run");
let res = client.post("https://file.io/").form(¶ms).send();
if let Ok(mut result) = res {
println!("{:?}", result);
println!("Body {:?}", result.text());
}
}
这应该像预期的输出那样响应