1

我正在尝试使用 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();
4

1 回答 1

6

了解用于调试此类 HTTP 问题的各种工具是非常有益的。在这种情况下,我曾经nc启动一个哑服务器,这样我就可以看到 HTTP 客户端正在发送的标头 ( 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标题。设置 aUser-Agent是一种很好的礼仪,并且Accept标题确实更符合您的利益,因此您也可以设置它们。

于 2016-01-20T14:32:39.623 回答