2016-09-27 17 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スクリプトを経由して自分のサーバーへのポストに到達しようと、私は適切な応答を得ることができます。

誰でも私が上記の送信元の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を読みます。


、パラメータを渡すこのパイソンを使用するには:

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 rawデータを見ることができますか? – bobdxcool