VisualCでHTMLクライアントを作っています。
GETはうまくいったのですがPOSTでデータがうまく送れていないようなので質問です。
wsprintf(szBuffer,POST /test.asp HTTP/1.0\nContent-Length: 12\n\npostdata=10
\n\n);
というデータを送っています。
応答としてはHTTP OKが帰ってきますが、POSTで送っている数値が反映されません。
受信ページのtset.aspの中身は
<html>
<head>
<title>テストプログラム</title>
</head>
<body>
<%
Dim getdata
Dim postdata
getdata=Request.QueryString(getdata)
postdata=Request.Form(postdata)
Response.Write(Getデータ= & getdata & <br />)
Response.Write(Postデータ= & postdata & <br />)
%>
<form method=post name=form1 action=test.asp>
<input type=text name=postdata ><br />
<input type=submit name=submit >
</form>
</body>
</html>
というページを作っています。
送っているデータが悪いと思いますが他に何か原因があるのでしょうか?
これが原因かは分かりませんが、気になる点があります。
・HTTPにおいて、改行は\r\nです。
・POSTデータに改行そのものを含めることはできません。
送りたいデータが10なら、末尾の\n\nは不要です。
送りたいデータが10\n\nなら、データ部をエンコードし
10%13%13としなければなりません。
分かりやすいように以下のように変えました。
szBuffer[0]='\0';
strcat(szBuffer,POST /test.asp HTTP/1.0\r\n);
strcat(szBuffer,Content-Length: 11\r\n);
strcat(szBuffer,\r\n);
strcat(szBuffer,postdata=10);
これでデータを送りましたが、思った動作ではありません。
以前の症状とあまり変わりません。
フォームのpostdataを¥DS\HTML HTMLが帰ってきます。
やはり送ってるデータか悪いのでしょうか・・・
Content-Type: application/x-www-form-urlencoded
を追加してみてはどうでしょうか。
仕事で返事遅くなりました。
YuOさんのアドバイスよりContent-Typeを付加するとうまくいきました。
最終的なコードは以下のようになりました。
szBuffer[0]='\0';
strcat(szBuffer,POST /test.asp HTTP/1.0\r\n);
strcat(szBuffer,Content-Type: application/x-www-form-urlencoded\r\n);
strcat(szBuffer,Content-Length: 11\r\n);
strcat(szBuffer,\r\n);
strcat(szBuffer,postdata=10);
皆様ありがとうございました。
解決済みをチェックしました。