0

を使用して HTTP POST リクエストを PHP サーバーに送信していますHttpWebRequest。私のコードは次のように機能します:

    /// <summary>
    /// Create Post request.
    /// </summary>
    /// <param name="requestUrl">Requested url.</param>
    /// <param name="postData">Post data.</param>
    /// <exception cref="RestClientException">RestClientException</exception>
    /// <returns>Response message, can be null.</returns>
    public string Post(string requestUrl, string postData)
    {
        try
        {
            //postData ends with &
            postData = "username=XXX&password=YYYY&" + postData;

            byte[] data = UTF8Encoding.UTF8.GetBytes(postData);

            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(requestUrl);
            request.Method = RequestMethod.Post.ToString().ToUpper();
            request.ContentType = "application/x-www-form-urlencoded";
            request.ContentLength = data.Length;

            using (Stream stream = request.GetRequestStream())
            {
                stream.Write(data, 0, data.Length);
                stream.Flush();
            }

            string responseString;
            using (WebResponse response = request.GetResponse())
            {
                responseString = GetResponseString(response);
            }

            return responseString;
        }
        catch (WebException ex)
        {
            var httpResponse = (HttpWebResponse)ex.Response;
            if (httpResponse != null)
            {
                throw new RestClientException(GetExceptionMessage(httpResponse));
            }

            throw;
        }
    }

私は奇妙な行動を経験しています。毎分、これを使用して 100 件のリクエストを送信しています。しかし、時々、このリクエストは POST データなしで実行されます。次に、PHPサーバーがエラーを返します(リクエストがPOSTであるかどうか、およびPOSTデータがあるかどうかを確認しているため)。

これはクライアント/サーバー通信です。Windows Service アプリケーションがインストールされたコンピューターは、Wifi を使用してインターネットに接続されています。接続が非常に悪い場合があります。これにより、言及された問題が発生する可能性がありますか? HTTP POST リクエストをこの動作に対して安全にする方法。

4

1 に答える 1

1

あなたが使用する「カスタマイズされた」動作が見られないので、WebClient.UploadDataメソッドを使用しないのはなぜですか? そうすれば、それはあなたが間違っていることではないことがわかるでしょう

それはあなたのためにすべての「汚い」作業を行い、同様に content-type ヘッダーを追加することができます。

詳細については、そのリンクを参照してください: http://msdn.microsoft.com/en-us/library/tdbbwh0a(v=vs.80).aspx

例:

public string Post(string requestUrl, string postData)
{
   WebClient myWebClient = new WebClient();
   myWebClient.Headers.Add("Content-Type","application/x-www-form-urlencoded");
   byte[] data = UTF8Encoding.UTF8.GetBytes(postData);
   byte[] responseArray = myWebClient.UploadData(requestUrl,data);
   return responseArray;
}
于 2012-06-22T16:53:41.583 に答える