2016-01-20 2 views
1

Я пытаюсь отправить запрос POST на сайт с использованием Hyper 0.9. Запрос работает с 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"}) 

но моя реализация 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(); 
+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 

Hyper:

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 действительно больше подходит для вашей выгоды, поэтому вы также можете установить их.

 Смежные вопросы

  • Нет связанных вопросов^_^