2016-01-20 87 views
1

我正在嘗試向使用Hyper 0.9的站點發送POST請求。該請求可與curlHyper 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(); 
+1

你應該檢查什麼是真正發射的HTTP方面;例如,正文中的'='和'&可能會意外地被url編碼。 –

回答

5

這是非常有益瞭解用於調試這類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標題確實更符合你的利益,所以你也可以設置它們。