POSTデータの送り方

[戻る]
田中さん 2006/06/09(金) 22:47:26
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>

というページを作っています。
送っているデータが悪いと思いますが他に何か原因があるのでしょうか?

dairygoods 2006/06/10(土) 08:04:33
これが原因かは分かりませんが、気になる点があります。

・HTTPにおいて、改行は"\r\n"です。
・POSTデータに改行そのものを含めることはできません。
 送りたいデータが"10"なら、末尾の"\n\n"は不要です。
 送りたいデータが"10\n\n"なら、データ部をエンコードし
  "10%13%13"としなければなりません。

田中さん 2006/06/10(土) 23:11: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が帰ってきます。

やはり送ってるデータか悪いのでしょうか・・・

YuO [E-Mail] 2006/06/11(日) 00:50:54
Content-Type: application/x-www-form-urlencoded
を追加してみてはどうでしょうか。

田中さん 2006/06/13(火) 10:34:29
仕事で返事遅くなりました。
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");

皆様ありがとうございました。

田中さん 2006/06/13(火) 10:35:46
[[解決]]
解決済みをチェックしました。

古いスレッドには追加発言できません。