Windows Phone 8.1的网络编程之HttpWebRequest类

来源:互联网 发布:工口动作数据 编辑:程序博客网 时间:2024/05/01 12:28

Windows Phone中有两个类可以实现HTTP协议的网络请求:HttpWebRequest类HttpClient类

前者适合处理简单的网络请求,后者对HTTP请求的支持更加强大,适合复杂的网络请求封装。


不过在此之前需要认识一个HTTP的两种请求方式:Get请求和Post请求。

两者的区别是:Get请求:从服务器上获取数据,通过URI提交数据,数据在URI中可以看到,同时提交的数据最多只

能有1024字节。Post请求:向服务器传送数据,通过写入数据流的方式提交,Post请求对于提交的数据大小没有限

制。


网络请求中,肯定会有各种各样的不确定错误,引发WebException,其Status属性包含指示错误源的

WebExceptionStatus。其枚举值如下:

Success:成功

ConnectFailure:远程服务器连接失败

SendFailure:发送失败

RequestCanceled:请求被取消

Pending:内部异步请求挂起

UnknownError:未知错误

MessageLengthLimitExceeded:网络请求的消息长度受到限制


示例代码:

using System;using System.Collections.Generic;using System.IO;using System.Linq;using System.Net;using System.Runtime.InteropServices.WindowsRuntime;using System.Text;using Windows.Foundation;using Windows.Foundation.Collections;using Windows.UI.Xaml;using Windows.UI.Xaml.Controls;using Windows.UI.Xaml.Controls.Primitives;using Windows.UI.Xaml.Data;using Windows.UI.Xaml.Input;using Windows.UI.Xaml.Media;using Windows.UI.Xaml.Navigation;// “空白页”项模板在 http://go.microsoft.com/fwlink/?LinkID=390556 上有介绍namespace App1{    /// <summary>    /// 可用于自身或导航至 Frame 内部的空白页。    /// </summary>    public sealed partial class HttpWebRequestDemo : Page    {        public HttpWebRequestDemo()        {            this.InitializeComponent();            //WebRequest和HttpWebRequest            HttpWebRequest request = HttpWebRequest.CreateHttp("http://www.baidu.com");            //设置请求的方法            request.Method = "Get";            //request.Method = "Post";            //指定构成HTTP标头的名称/值对的集合            request.Headers["Cookie"] = "stuName = value";            //设置请求的身份验证信息            request.Credentials = new NetworkCredential("username", "password");            //发起GetResponse请求,开始对Internet资源的异步请求            request.BeginGetResponse(responseCallBack, request);            //request.BeginGetRequestStream(responseStreamCallBack, request);        }        //发送获取发送数据流的请求的响应回调方法        //private void responseStreamCallBack(IAsyncResult ar)        //{        //    HttpWebRequest httpWebRequest = (HttpWebRequest)ar.AsyncState;        //    using (Stream stream = httpWebRequest.EndGetRequestStream(ar))        //    {        //        string content = "testString";        //        byte[] data = Encoding.UTF8.GetBytes(content);        //        stream.Write(data, 0, data.Length);        //    }        //    httpWebRequest.BeginGetResponse(ResponseCallBackPost, httpWebRequest);        //}        //private void ResponseCallBackPost(IAsyncResult ar)        //{        //    //和Get请求回调方法一样        //}        //请求回掉方法        private void responseCallBack(IAsyncResult ar)        {            HttpWebRequest httpWebRequest = (HttpWebRequest)ar.AsyncState;            WebResponse webResponse = httpWebRequest.EndGetResponse(ar);            //获取请求返回的内容            using(Stream stream = webResponse.GetResponseStream())            using(StreamReader sr = new StreamReader(stream))            {                //请求返回的字符串的内容                string content = sr.ReadToEnd();            }        }        /// <summary>        /// 在此页将要在 Frame 中显示时进行调用。        /// </summary>        /// <param name="e">描述如何访问此页的事件数据。        /// 此参数通常用于配置页。</param>        protected override void OnNavigatedTo(NavigationEventArgs e)        {        }    }}

0 0
原创粉丝点击