web-dev-qa-db-ja.com

POSTリクエストでHTMLフォームの送信を模倣する方法は?

アプリケーションからサーバーにバグレポートを送信するために使用されるHTMLフォームがあります。プログラムでこの動作を模倣する必要があります。対応するPOST要求(または一連の要求)はどのようになりますか?

<form name="bugreport" method="post" enctype="multipart/form-data" action="http://my-server.com/bugreport.php">
    <div name="SentData">
        <textarea name="logfile" class="UserVisible"></textarea><br>
        <textarea name="configfile" class="UserVisible"></textarea><br>
    </div>
    <textarea name="usercomment" class="invisible"></textarea><br>
    <input name="useremail" type="text" class="invisible">
    <input class="invisible" type="submit" value="Send">
</form> 
22
Violet Giraffe

POSTリクエストは、いくつかのヘッダーとリクエストボディで構成されます。フォームを送信すると、ブラウザ RLエンコード すべてのフォームフィールドの名前と値が入力され、これらは、この形式のリクエスト本文に含まれます。

fieldname1=fieldvalue1&fieldname2=fieldvalue2

つまりリクエストの本文は典型的なクエリ文字列のように見えます。


フォームのリクエストは次のようになります。

POST /bugreport.php HTTP/1.1
Host: www.example.com
Content-Type: application/x-www-form-urlencoded
Content-Length: [size of the request body]

logfile=blabla&configfile=more+blabla&usercomment=hello&useremail=

プログラムがブラウザの動作と一致することを確認するには、Firefoxでフォームを投稿し、 Firebug のネットパネルを使用してリクエストヘッダーと本文を検査します。

43
Martin