2016-09-27 86 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錯誤的請求

然而,當我試圖通過我的筆記本電腦通過一個python腳本到達後到我的服務器,我我能夠得到適當的迴應。

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那也不管用。是否有可能查看python腳本實際發送的http原始數據,以便我可以將這些原始數據複製到我的微控制器上? – bobdxcool