1

これを行うときに問題に遭遇したので、私は最初にSOを検索して、他の人が同様の問題を抱えているかどうかを調べ、次の質問を見つけました:C#WinFormからPHPページにデータをPOSTする

しかし、この質問への回答に示されているコード例を試したところ、機能しません。設定する必要のあるPOST変数が設定されていないことを示すメッセージで応答するように要求しているPHPスクリプト。これが私のC#コードです:

HttpWebRequest POSTreq =
    (HttpWebRequest)WebRequest.Create("http://82.41.255.140/api/post-ptr");

string POSTdata = "action=" + HttpUtility.UrlEncode("date");
byte[] data = Encoding.ASCII.GetBytes(POSTdata);

POSTreq.Method = "POST";
POSTreq.ContentType = "application/x-www-form-urlencoded";
POSTreq.ContentLength = data.LongLength;

POSTreq.GetRequestStream().Write(data, 0, data.Length);

HttpWebResponse POSTres = (HttpWebResponse)POSTreq.GetResponse();
Console.WriteLine("HTTP Status Code {0}", POSTres.StatusCode);
Console.WriteLine("Response Method: {0}", POSTres.Method);
Console.WriteLine("Response Text: {0}",
    new StreamReader(POSTres.GetResponseStream()).ReadToEnd());
Console.ReadLine();

そして、これはPHPスクリプト内のコードです。

<?php    
    $A = strtolower($_POST["action"]);

    if ($A == "date")
    {
        echo date("c");
    }
    else if ($A == "ip")
    {
        echo $_SERVER["REMOTE_ADDR"];
    }
    else if ($A == null || $A == "")
    {
        echo "bad_request:no_argument:POST_action";
    }
    else
    {
        echo "bad_request:invalid_argument:POST_action";
    }

    exit();
?>

C#プログラムからPOSTリクエストを行うと、変数actionが設定されていないことを示す次の画面が表示されます。私は自分のコードに明らかなものが欠けていますか?

画面

返信してくださった方々に感謝します。

4

3 に答える 3

4

ストリームをフラッシュする必要がある場合があります。私は通常このようにします:

string POSTdata = "action=" + HttpUtility.UrlEncode("date");
byte[] data = Encoding.ASCII.GetBytes(POSTdata);

POSTreq.Method = "POST";
POSTreq.ContentType = "application/x-www-form-urlencoded";
POSTreq.ContentLength = data.LongLength;

using (Stream stream = POSTreq.GetRequestStream()) {
    stream.Write(data, 0, data.Length);
    stream.Flush();
}
于 2012-09-27T16:20:23.450 に答える
2

リクエストストリームを閉じていません。コードに非常に近いMSDNドキュメントのこの例を参照してください。

編集

PHPのnullチェックも正しくありません。 この記事を参照してください

于 2012-09-27T16:27:23.017 に答える
0

問題を見つけました。

リクエストの末尾/を省略したことが判明し、リクエストは301になりました。これにより、何らかの理由でpost変数が削除されました。

だからhttp://82.41.255.140/api/post-ptrだったはずhttp://82.41.255.140/api/post-ptr/です。

答えてくれた皆さん、ありがとうございました。

于 2012-09-28T14:23:25.360 に答える