1

HTTP サーバーにテキストを送信する必要があります。キャプティブポータルなどに送信されたのではなく、正常に送信されたことをかなり確実に知る必要があります。ただし、HTTP サーバーにはいくつかの制限があるため、返された HTTP ステータス コードが 200 であることを確認することが最善の方法です。

サーバーから返された HTTP ステータス コードを取得するにはどうすればよいですか?

これは私の現在のコードです:

        WebClient client = new WebClient();
        client.Headers["Content-Type"] = "text/xml";
        client.Encoding = Encoding.UTF8;
        bool? result=null;
        try
        {
            client.UploadStringAsync(server, "POST", data);
            client.UploadStringCompleted += (s, e) =>
                {
                    result=e.Error == null;
                };
        }
        catch { }

現在e.Error、サーバーが 400-500 エラー コードを返した場合に設定されますが、サーバーが 300 系列の HTTP ステータス コードを返した場合には設定されません。

4

1 に答える 1

1

このコードをテストする機会はありませんでしたが、1 つまたは 2 つのアイデアが得られるかもしれません。

 string data;

        var request = HttpWebRequest.Create("http://yourserver") as HttpWebRequest;
        request.Accept = "text/xml";
        request.Headers.Add("Accept-Charset", "utf-8");

        try
        {
            var response = await Task.Factory.FromAsync<WebResponse>(request.BeginGetResponse, request.EndGetResponse, null);

            // do something with your data, e.g. read it, deserialize it
            using (var responseStream = response.GetResponseStream())
            {
                using (var reader = new StreamReader(responseStream))
                {
                    data = reader.ReadToEnd();
                }
                // ....
            }

            var somethingInteresting = response as HttpWebResponse;
            Debug.WriteLine("Status is {0}", somethingInteresting.StatusCode);
        }
        catch (WebException ex)
        {
            var errorResponse = ex.Response as HttpWebResponse;
            var errorHttpStatusCode = errorResponse.StatusCode;

            Debug.WriteLine("Here's your error Http status: {0}", ex.Status);
        }
于 2013-04-02T16:39:30.663 に答える