Hyper POST请求总是产生400
问题描述:
我正在尝试向使用Hyper 0.9的站点发送POST请求。该请求可与curl
:Hyper POST请求总是产生400
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"})
但我锈病的实施似乎没有穿过去,总是产生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客户端发送的标头(nc -l 5000
)。我修改了卷曲和铁锈的例子指向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
标题。设置一个User-Agent
将是一个很好的礼仪,Accept
标题确实更符合你的利益,所以你也可以设置它们。
你应该检查什么是真正发射的HTTP方面;例如,正文中的'='和'&可能会意外地被url编码。 –