post - Hyper POST 请求总是产生 400

标签 post rust hyper

我正在尝试使用 Hyper 0.9 向站点发送 POST 请求。该请求适用于 curl:

curl https://api.particle.io/v1/devices/secret/set_light -d args=0 -d access_token=secret

和 Python:

import requests
r = requests.post("https://api.particle.io/v1/devices/secret/set_light",
    data={"access_token": "secret", "args": "0"})

但我的 Rust 实现似乎没有通过,总是产生 400。

use hyper::client::Client;

let addr = "https://api.particle.io/v1/devices/secret/set_light";
let body = "access_token=secret&args=0";
let mut res = client.post(addr)
                .body(body)
                .send()
                .unwrap();

最佳答案

了解用于调试此类 HTTP 问题的各种工具将大有裨益。在本例中,我使用 nc 启动了一个哑服务器,这样我就可以看到 HTTP 客户端发送的 header (nc -l 5000)。我修改了 cURL 和 Rust 示例以指向 127.0.0.1:5000,这是输出:

curl :

POST /v1/devices/secret/set_light HTTP/1.1
Host: 127.0.0.1:5000
User-Agent: curl/7.43.0
Accept: */*
Content-Length: 26
Content-Type: application/x-www-form-urlencoded

args=0&access_token=secret

super :

POST /v1/devices/secret/set_light HTTP/1.1
Host: 127.0.0.1:5000
Content-Length: 26

access_token=secret&args=0

我在 particle.io 上没有帐户可用于测试,但我猜您需要那个 Content-Type header 。设置 User-Agent 是一种很好的礼仪,而 Accept header 实际上对您更有利,因此您不妨也设置它们。

关于post - Hyper POST 请求总是产生 400,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34891171/

相关文章:

android - 使用 android 将照片发布到 facebook 上 friend 的墙上

http - 如何从 GET 响应中获取 cookie?

json - 如何修复特征 `std::convert::From<serde_json::Value>` 没有为 `hyper::Body` 实现?

rust - 为 Rust 的 hyper http crate 使用自定义传输器

database - CouchDB 中的 "Content-Type must be application/json"错误

Firefox 和 Nodejs 的 jQuery Ajax POST 错误

javascript - Access-Control-Allow-Headers 不允许请求 header 字段 Access-Control-Allow-Headers

rust - "thread ' <main> ' has overflowed its stack"构造大树时

rust - 为什么“通过克隆拥有的变量需要静态生命周期”

rust - Rust:论点要求借用持续于 `' static`