HTMLの構築が必要なArduino POST line-by-line 。Content-Lengthaを必ずしも知らないサーバーにデータを送信しています。 -prioriなので、「チャンク」エンコーディングを使用しています。
私が試したとき ウィキペディアからのこの例の投稿rfc2616で指定されている "Transfer-Encoding"オプション
client.println("POST /myurl HTTP/1.1");
client.println("Host: 12.345.679.999"); // replaced with the test server's IP
client.println("User-Agent: Arduino/1.0");
client.println("Transfer-Encoding: chunked");
client.println();
client.println("4");
client.println("test");
client.println("0");
client.println();
または、エスケープ文字を明示的に使用する場合:
client.print("4\r\ntest\r\n0\r\n\r\n");
サーバーから次のエラーが表示されます。
HTTP/1.1 411 Length Required
A request of the requested method POST requires a valid Content-length.
Server: Apache/2.2.22 (Ubuntu)
ただし、「チャンク」エンコーディングでは、Content-Lengthヘッダーフィールドは必要ありません。 4.4-rfc2616のメッセージ長 を参照してください。
フィールドがありませんか?この呼び出しが機能しないのはなぜですか?
記録として、非チャンクエンコーディングは機能します。
if(client.connect(server, 80)){
String PostData = "test";
Serial.println("POST /myurl HTTP/1.1");
client.println("Host: 12.345.679.999"); // replaced with the test server's IP
Serial.println("User-Agent: Arduino/1.0");
Serial.print("Content-Length: ");
Serial.println(PostData.length());
Serial.println();
Serial.println(PostData);
}
Apache2 error.logから:「チャンク転送-エンコーディングは禁止されています」
見つけた後
chunked Transfer-Encoding forbidden
私のApache2ログで、エラーは私が作成していたPOST)にはないと結論付けました。
Modwsgi(ApacheとDjangoの中間層)では、デフォルトでチャンク転送エンコーディングが有効になっていないことがわかりました。 以前は、チャンクはまったくサポートされていませんでした
WSGIChunkedRequest On
私のApacheでhttpd.conf
ファイルはチャンク化されたリクエストを許可しました(これ以上411エラーはありません)