0

wp 7.1 アプリケーションの HttpWebRequest に小さな問題があります。アプリケーションはいくつかのゲーム統計データを POST メソッドで php サーバーに送信しますが、サーバーはそれをフェッチしません。$_POST 配列は空のままです。WireShark を使用すると、サーバーに送信されたパケットにデータが含まれていることがわかりますが、サーバーは何も受信しません。

データが送信されるメソッドのコードは次のとおりです。

    private void SendStatisticsToServer()
    {
        if (this.stat.Name == String.Empty || Object.ReferenceEquals(this.stat.Name, null))
        {
            this.OnEmptyNameEvent();
        }
        else
        {
            HttpWebRequest request = WebRequest.Create(ADDRESS) as HttpWebRequest;
            request.Method = "POST";
            request.ContentType = "text/plain";
            request.AllowReadStreamBuffering = false;

            request.BeginGetRequestStream(new AsyncCallback(GetRequestStreamCallBack), request);
        }
    }

    private void GetRequestStreamCallBack(IAsyncResult requestRes)
    {
        StringBuilder builder = new StringBuilder("user=");
        builder.Append(this.stat.Name);
        builder.Append("&won=");
        builder.Append(this.stat.Won == true ? "1" : "0");
        builder.Append("&scores=");
        builder.Append(this.stat.Scores.ToString());

        Byte[] byteArray = Encoding.UTF8.GetBytes(builder.ToString());

        HttpWebRequest request = requestRes.AsyncState as HttpWebRequest;
        Stream stream = request.EndGetRequestStream(requestRes);
        stream.Write(byteArray, 0, byteArray.Length);
        stream.Flush();
        stream.Close();

        request.BeginGetResponse(new AsyncCallback(GetResponseCallback), request);
    }

    private void GetResponseCallback(IAsyncResult requestRes)
    {
        HttpWebRequest request = requestRes.AsyncState as HttpWebRequest;

        HttpWebResponse response = request.EndGetResponse(requestRes) as HttpWebResponse;
        Stream stream = response.GetResponseStream();
        StreamReader streamRead = new StreamReader(stream);
        String responseString = streamRead.ReadToEnd();
        stream.Close();
        streamRead.Close();

        response.Close();
        this.OnExitButtonPressedEvent(ButtonType.Exit);
    }

(コメントのないコードで申し訳ありませんが、自明だと思います)

ご覧のとおり、ほとんど msdn からのコピペです。

そして、ここに php -server コードがあります:

    <?php
     header('Content-type: text/plain'); 
     // HTTP/1.1
     header("Cache-Control: no-store, no-cache, must-revalidate");
     // HTTP/1.0
     header("Pragma: no-cache");
     $logfile = 'postdata.txt';
     $firstData = $_POST["user"];
     $secondData = $_POST["won"];
     $thirdData = $_POST["scores"];
     $file = fopen($logfile, "a+");

     fwrite($file, "Post received - data: firstData=". $firstData . "   
     secondData=" . $secondData . " thirdData=" . $thirdData . "\r\n");
     fclose($file);

     ?>

ご覧のとおり、このサーバーはあまり機能しません。データを受信して​​ログ ファイルにプッシュするだけです。

Qt で記述された古いアプリケーションは同じ条件下で正常に動作し、$_POST 配列は空ではないため、サーバーのバグではありません。

どこにエラーがある可能性があるか教えてください。

ターゲット プラットフォームは WP 7.1 です。

ご回答ありがとうございます。

4

1 に答える 1

2

答えとしてこれを行う必要がありますが、これが正しいかどうかは完全にはわかりません。テキスト/プレーン投稿の場合、パラメーターの形式は次のとおりです。

user=d
won=1
scores=3

application/x-www-form-urlencoded を実行する場合は、

user=d&won=1&scores=3

PHP が text/plain をサポートしていない可能性もあります。

于 2013-01-31T22:16:07.563 に答える