一、预备知识:
什么是Get请求?什么是Url?请直接Baidu,Google,Bing。
二、WP7的网络操作:非阻塞的异步操作(暂时还没有看到直接的同步的操作的方式)。
三、主要代码:
public class Http { public delegate void HandleResult(string result); private HandleResult handle; public void StartRequest(string Url, HandleResult handle) { this.handle = handle; var webRequest = (HttpWebRequest)WebRequest.Create(Url); webRequest.Method = "GET"; try { webRequest.BeginGetResponse(new AsyncCallback(HandleResponse), webRequest); } catch { } } public void HandleResponse(IAsyncResult asyncResult) { HttpWebRequest httpRequest = null; HttpWebResponse httpResponse = null; string result = string.Empty; try { httpRequest = (HttpWebRequest)asyncResult.AsyncState; httpResponse = (HttpWebResponse)httpRequest.EndGetResponse(asyncResult); using (var reader = new StreamReader(httpResponse.GetResponseStream(), Encoding.UTF8)) { result = reader.ReadToEnd(); reader.Close(); } } catch { } finally { if (httpRequest != null) httpRequest.Abort(); if (httpResponse != null) httpResponse.Close(); } handle(result); } }
四、使用:
这是一个简单的Get操作封装类,使用的时候只需要做如下调用:
var http = new Http(); http.StartRequest(@"http://www.baidu.com", result=> { //处理返回结果result });
StartRequest的第一个参数为请求的Url,当然这里为了简便只写了百度的网址。
第二个参数是我们对结果的处理代理函数,这里为了简便直接使用了匿名方法。
五、问题与分析:
1、如果是需要在获得请求结果之后,对界面的元素进行操作,别忘记在handle中使用Deployment.Current.Dispatcher.BeginInvoke(),或者,一个更直接的办法,就是对上面的HandleResponse的最后一句做一点修改,改为:Deployment.Current.Dispatcher.BeginInvoke(()=>handle(result));
2、有一种极端的情况,即网络情况不好,而请求需要发送的数据又足够长,这种请求会持续数秒,假设是界面上的一个按钮按下的处理事件调用此网络请求,界面将会卡死。这里有一个很容易进入误区:以为WP7的网络都是异步的,就可以不使用多线程了。在大部分时候,此误区并不容易被发现,主要就是网络都不算坏,而且Get的请求发送数据量都不算多,但现在讨论的是极端情况,为了完美与良好的用户体验,在这个问题上下一点功夫还是值得的。WP7的异步,只是发送完请求与等待请求的异步,而发送请求的过程,还是同步的状态,所以,需要对上面的StartRequest方法还需要进行改造:
webRequest.BeginGetResponse(new AsyncCallback(HandleResponse), webRequest);
换成:
new Thread(() =>webRequest.BeginGetResponse(new AsyncCallback(HandleResponse), webRequest)).Start();
(不得不说,C#的匿名函数给我们提供了很大的方便。)
六、附源码:
http://vdisk.weibo.com/s/3baOy
转载请注明出处:
Windows Phone 7(WP7)开发 网络操作(1) HttpWebRequest基本的GET请求
锦燕云
http://www.cnblogs.com/vistach/archive/2012/03/14/Windows_Phone_WP7_Net_Http_HttpWebRequest_Get.html
相关推荐
C#(也称Csharp)在多线程下并发执行HTTP请求的实现,采用C#封装HttpWebRequest类开发的多线程并发采集程序源码文档,文档中详细说明了HttpWebRequest并发HTTP请求实现网站采集的方法,经过测试同时并发1000+不是问题...
C#实现通过HttpWebRequest发送POST请求实现网站自动登陆
使用 HttpWebRequest发送自定义POST请求
C# asp.net http HttpWebRequest模拟浏览器请求下载文件到本地
模拟请求,基于HttpWebRequest封装好的一个类,自动记下和发送Cookie,你只管调用方法就行了,很实用
HttpWebRequest详解HttpWebRequest详解HttpWebRequest详解
C#中HttpWebRequest使用介绍 GET HTTP HTTPS 请求
httpwebrequest调用webservice返回数据
window phone WebClient和HttpWebRequest 并解决gb2312乱码问题
本文实例讲述了C#基于HttpWebRequest实现发送HTTP请求的方法。分享给大家供大家参考,具体如下: ...GET请求 /// /// 发送GET请求 /// /// 请求URL,如果需要传参,在URL末尾加上“?+参数名=参数值”即可</param
HttpTest操作HttpWebRequest ,用于post和get的学习,参数使用Dictionary, string> dic
使用HttpWebRequest可以让开发者控制请求/响应流程的各个方面,如 timeouts, cookies, headers, protocols。另一个好处是HttpWebRequest类不会阻塞UI线程。例如,当您从响应很慢的API服务器下载大文件时,您的应用...
httpwebrequest 封装类
.NET中封装静态类通过HttpWebRequest实现post、get、文件传输。
1.这是一个用HttpWebRequest类构建完整Http多部请求上传文件的示例 2.上传地址是金山文档预览的地址,所以,只要上传的是word、pdf、excel一类的文档,可以通过返回的地址直接在线预览,是一种偷懒的文档在线浏览...
主要给大家介绍了关于.net core并发请求发送HttpWebRequest的坑的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面来一起看看吧
WebRequest发起Http_Post请求模拟登陆并cookie处理示例HTTP协议详解
C# 多线程基本于httpwebrequest实现的下载功能 每个线程均可以通过事件追踪情况
一个很实用的例子,注意要用OFFICE 2007