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 の問題をデバッグするためのさまざまなツールを知っておくことは非常に有益です。この場合、ncHTTP クライアントが送信しているヘッダーを確認できるように、ダム サーバーを起動していました ( 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ヘッダーが必要だと思います。を設定するのUser-Agentは良いエチケットであり、Acceptヘッダーは本当にあなたの利益になるので、それらも設定することをお勧めします。

于 2016-01-20T14:32:39.623 に答える