2016-09-27 2 views
0

Я пытаюсь отправить данные на свой сервер с моего микроконтроллера. Мне нужно отправить исходные данные HTTP из моего контроллера и это то, что я отправляю ниже:HTTP сообщение Json 400 Ошибка

POST /postpage HTTP/1.1 
Host: https://example.com 
Accept: */* 
Content-Length: 18 
Content-Type: application/json 

{"cage":"abcdefg"} 

Мой сервер требует кодирования в формате JSON, а не формы, закодированный запрос.

Для приведенного выше запроса, отправленного, я получаю 400 ошибки от сервера HTTP/1.1 400 Bad Request

Однако, когда я пытаюсь достичь поста на мой сервер через питон скрипт через мой ноутбук, я я могу получить правильный ответ.

import requests 
url='https://example.com' 
mycode = 'abcdefg' 



def enter(): 
    value = requests.post('url/postpage', 
          params={'cage': mycode}) 
    print vars(value) 


enter() 

Может кто-нибудь, пожалуйста, дайте мне знать, где я могу ошибиться в необработанных http-данных, которые я отправляю выше?

ответ

-1

HTTP определяет разделитель между заголовками в качестве одной строки, и требует двойного перевода строки перед содержимым:

POST /postpage HTTP/1.1 
Host: https://example.com 
Accept: */* 
Content-Length: 18 
Content-Type: application/json 

{"cage":"abcdefg"} 

Если вы не думаете, у вас есть все права запроса, попытаться увидеть, что был послан Python:

response = ... 
request = response.request # request is a PreparedRequest. 
headers = request.headers 
url = request.url 

Читать docs for PreparedRequest для получения дополнительной информации.


Чтобы передать параметр, используйте этот Python:

REQUEST = 'POST /postpage%s HTTP/1.1\r\nHost: example.com\r\nContent-Length: 0\r\nConnection: keep-alive\r\nAccept-Encoding: gzip, deflate\r\nAccept: */*\r\nUser-Agent: python-requests/2.4.3 CPython/2.7.9 Linux/4.4.11-v7+\r\n\r\n'; 
query = '' 
for k, v in params.items(): 
    query += '&' + k + '=' + v # URL-encode here if you want. 
if len(query): query = '?' + query[1:] 
return REQUEST % query 
+0

я следовал один и тот же синтаксис, как вы выложили. Просто дайте форматирование прямо в моем сообщении. Исправил его в сообщении. – bobdxcool

+0

@bobdxcool Возможно, попробуйте «User-Agent»? –

+0

@J F Это тоже не работает. Можно ли как-то увидеть, какие HTTP-данные передают сценарий python, чтобы я мог реплицировать эти необработанные данные на моем микроконтроллере? – bobdxcool

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