Hyper POST 请求总是产生 400
Hyper POST request always yields 400
我正在尝试向使用 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 客户端发送的 headers (nc -l 5000
)。我修改了 cURL 和 Rust 示例以指向 127.0.0.1:5000
,这是输出:
卷曲:
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
超级:
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对你更有利,你也可以设置。
我正在尝试向使用 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 客户端发送的 headers (nc -l 5000
)。我修改了 cURL 和 Rust 示例以指向 127.0.0.1:5000
,这是输出:
卷曲:
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
超级:
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对你更有利,你也可以设置。