Windows phone开发 网络编程之HttpWebRequest
HttpWebRequest和WebClient的区别
1,HttpWebRequest是个抽象类,所以无法new的,需要调用HttpWebRequest.Create();
2,其Method指定了请求类型,这里用的GET,还有POST;也可以指定ConentType;
3,其请求的Uri必须是绝对地址;
4,其请求是异步回调方式的,从BeginGetResponse开始,并通过AsyncCallback指定回调方法;
5,WebClient方式使用基于事件的异步编程模型,在HTTP响应返回时引发的WebClient回调是在UI线程中调用的,因此可用于更新UI元素的性。HttpWebRequest是基于后台进程运行的,回调不是UI线程,所以不能直接对UI进行操作,通常使用Dispatcher.BeginInvoke()跟界面进行通讯。
HTTP中GET请求与POST请求的区别:
1.GET请求是从服务器上获取数据 POST请求是向服务器传送数据
2.GET请求在通过URL提交数据,数据在URL中可以看到 POST请求数据是通过写入数据流的方式提交
3.GET请求提交的数据最多只能1024个字节 POST请求提交的数据没有限制
HttpWebRequest类实现GET请求
1.通过HttpWebRequest.CreateHttp()方法可以创建一个HttpWebRequest对象;
2.设置请求的参数(如设置请求方式为GET);
3.发起异步响应请求:BeginGetGetResponse;
4.结束异步响应EndGetResponse;
5.获取请求的内容;
6.对请求进行异常处理。
通过下面的例子增加对HttpWebRequest类的GET请求方式的理解:
public void httpWebRequestGet()
{
try{
String uri = "http://www.baidu.com/ ";
WebRequest request = HttpWebRequest.CreateHttp(new Uri(uri)); //创建WebRequest对象
request.Method = "GET"; //设置请求方式为GET
request.BeginGetResponse(responseStreamCallback, request); //发起GetResponse请求,返回应答请求异步操作的状态
}
catch(WebException e)
{
outputBlock.Text += "\n出现异常请求失败!\n";
outputBlock.Text += "异常信息: ";
outputBlock.Text += e.Message;
outputBlock.Text += "\nStatus: ";
outputBlock.Text += e.Status;
}
catch(Exception e)
{
outputBlock.Text += "\n出现异常请求失败!\n";
outputBlock.Text += "\n异常信息: ";
outputBlock.Text += e.Message;
}
} private void responseCallback(IAsyncResult result)
{
try{
HttpWebRequest request = (HttpWebRequest)result.AsyncState; //获取异步操作返回的的信息
WebResponse response = request.EndGetResponse(result);
using (Stream stream = response.GetResponseStream()) //获取请求返回内容
using(StreamReader read = new StreamReader(stream))
{
string text = read.ReadToEnd();
Dispatcher.BeginInvoke(() => //使用Dispatcher.BeginInvoke()更新UI信息
{
textBlock1.Text = text;
});
} }
//异常处理
catch(WebException e)
{
outputBlock.Text += "\n出现异常请求失败!\n";
outputBlock.Text += "异常信息: ";
outputBlock.Text += e.Message;
outputBlock.Text += "\nStatus: ";
outputBlock.Text += e.Status;
}
catch(Exception e)
{
outputBlock.Text += "\n出现异常请求失败!\n";
outputBlock.Text += "\n异常信息: ";
outputBlock.Text += e.Message;
}
}
HttpWebRequest类实现POST请求
1.通过HttpWebRequest.CreateHttp()方法可以创建一个HttpWebRequest对象;
2.设置请求的参数(如设置请求方式为POST)
3.发起获取要发送的数据流请求:BeginGetRequestStreamGetResponseStream请求;
4.结束异步的数据流请求:EndGetRequestStream;
5.把要传递的数据写入数据流;
6.发起异步响应请求:BeginGetGetResponse;
7.结束异步响应EndGetResponse ;
8.获取请求的内容;
9.对请求进行异常处理
通过下面的例子增加对HttpWebRequest类的POST请求方式的理解:
public void httpWebRequestPost()
{
try{
String uri = "http://www.baidu.com/ ";
WebRequest request = HttpWebRequest.CreateHttp(new Uri(uri)); //创建WebRequest对象
request.Method = "POST"; //设置请求方式为POST
request.BeginGetRequestStream(responseStreamCallback, request); //发起GetResponseStream请求,返回应答请求异步操作的状态
}
catch(WebException e)
{
outputBlock.Text += "\n出现异常请求失败!\n";
outputBlock.Text += "异常信息: ";
outputBlock.Text += e.Message;
outputBlock.Text += "\nStatus: ";
outputBlock.Text += e.Status;
}
catch(Exception e)
{
outputBlock.Text += "\n出现异常请求失败!\n";
outputBlock.Text += "\n异常信息: ";
outputBlock.Text += e.Message;
}
}
//发起获取发送数据流的请求的响应 peivate void responseStreamCallback(IAsyncResult result)
{
HttpWebRequest request = (HttpWebRequest)result.AsyncState; //获取异步操作返回的的信息
Stream stream = httpWebRequest.EndGetRequestStream(result)) String str = "hello world!";
byte[] data = Encoding.UTF8.GetBytes(str);
stream.Write(data,,data.Length);
stream.Close(); request.BeginGetResponse(responseCallback, request);
} private void responseCallback(IAsyncResult result)
{
try{
HttpWebRequest request = (HttpWebRequest)result.AsyncState; //获取异步操作返回的的信息
WebResponse response = (WebResponse)request.EndGetResponse(result);
using (Stream stream = response.GetResponseStream())
using ( StreamReader read = new StreamReader(stream)
{
string text = read.ReadToEnd();
Dispatcher.BeginInvoke(() => //使用Dispatcher.BeginInvoke()更新UI信息
{
textBlock.Text = text;
});
} }
//异常处理
catch(WebException e)
{
outputBlock.Text += "\n出现异常请求失败!\n";
outputBlock.Text += "异常信息: ";
outputBlock.Text += e.Message;
outputBlock.Text += "\nStatus: ";
outputBlock.Text += e.Status;
}
catch(Exception e)
{
outputBlock.Text += "\n出现异常请求失败!\n";
outputBlock.Text += "\n异常信息: ";
outputBlock.Text += e.Message;
}
}
文章为作者原创,转载请标明出处,谢谢 http://www.cnblogs.com/spilledlight/p/4929418.html
Windows phone开发 网络编程之HttpWebRequest的更多相关文章
- [深入浅出WP8.1(Runtime)]网络编程之HttpClient类
12.2 网络编程之HttpClient类 除了可以使用HttpWebRequest类来实现HTTP网络请求之外,我们还可以使用HttpClient类来实现.对于基本的请求操作,HttpClient类 ...
- 网络编程之HttpClient类(转)
12.2 网络编程之HttpClient类 除了可以使用HttpWebRequest类来实现HTTP网络请求之外,我们还可以使用HttpClient类来实现.对于基本的请求操作,HttpClient类 ...
- 网络编程之TCP/IP各层详解
网络编程之TCP/IP各层详解 我们将应用层,表示层,会话层并作应用层,从TCP/IP五层协议的角度来阐述每层的由来与功能,搞清楚了每层的主要协议,就理解了整个物联网通信的原理. 首先,用户感知到的只 ...
- 网络编程之Socket & ServerSocket
网络编程之Socket & ServerSocket Socket:网络套接字,网络插座,建立网络通信连接至少要一对端口号(socket).socket本质是编程接口(API),对TCP/IP ...
- GO语言的进阶之路-网络编程之socket
GO语言的进阶之路-网络编程之socket 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.什么是socket; 在说socket之前,我们要对两个概念要有所了解,就是IP和端口 ...
- [深入浅出Cocoa]iOS网络编程之Socket
http://blog.csdn.net/kesalin/article/details/8798039 版权声明:本文为博主原创文章,未经博主允许不得转载. 目录(?)[+] [深入浅出Co ...
- Android网络编程之HttpClient运用
Android网络编程之HttpClient运用 在 Android开发中我们经常会用到网络连接功能与服务器进行数据的交互,为此Android的SDK提供了Apache的HttpClient来方便我们 ...
- 网络编程之Socket代码实例
网络编程之Socket代码实例 一.基本Socket例子 Server端: # Echo server program import socket HOST = '' # Symbolic name ...
- 网络编程之C10K
网络编程之C10K 虽然在过去的十几年里C10K问题已经可以很好的解决,但学习网络编程时研究C10K问题仍然价值巨大,因为技术的发展都是有规律和线索可循的,了解C10K问题及其解决思路,通过举一反三, ...
随机推荐
- webAPP 原生APP 对比
Web App即是一种框架型APP开发模式(HTML5 APP 框架开发模式),该开发具有跨平台的优势,该模式通常由“HTML5云网站+APP应用客户端”两部份构成,APP应用客户端只需安装应用的框架 ...
- Aizu - 1379 Parallel Lines
平行直线 题意:给出一些点,这些点两两相连成一条直线,问最多能连成多少条直线. 思路:暴力出奇迹!!记得当时比赛做这道题的时候一直依赖于板子,结果却限制了自己的思路,这得改.dfs直接暴力,但是需要将 ...
- hdu2004 成绩转换【C++】
成绩转换 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submis ...
- time库
简介 返回系统当前时间戳(正常的生活时间) 返回格林威治时间戳对应的struct_time对象 本地时间的struct_time对象 当前时间戳对应的易读格式字符串时间(周几,月份,号数,时,分,秒, ...
- 【codeforces 768E】Game of Stones
[题目链接]:http://codeforces.com/contest/768/problem/E [题意] NIM游戏的变种; 要求每一堆石头一次拿了x个之后,下一次就不能一次拿x个了; 问你结果 ...
- JavaSE 学习笔记之内部类(九)
内部类:如果A类需要直接访问B类中的成员,而B类又需要建立A类的对象.这时,为了方便设计和访问,直接将A类定义在B类中.就可以了.A类就称为内部类.内部类可以直接访问外部类中的成员.而外部类想要访问内 ...
- Ubuntu 安装有道词典
本系列文章由 @yhl_leo 出品,转载请注明出处. 文章链接: http://blog.csdn.net/yhl_leo/article/details/51302546 官网首页:有道词典 其中 ...
- EntityFramewordCore 2.2 DBFirst简单使用
如何用EF Core连接数据库并且生成实体类? 1.通过Nuget安装依赖 Install-package Microsoft.EntityFrameworkCore Install-package ...
- ACM的你伤不起
劳资六年前开始搞ACM啊!!!!!!!!!! 从此踏上了尼玛不归路啊!!!!!!!!!!!! 谁特么跟劳资讲算法是程序设计的核心啊!!!!!! 尼玛除了面试题就没见过用算法的地方啊!!!!!! ...
- java 垃圾收集
1.为什么使用垃圾收集 a.把用户从释放占用内存的重担中解救出来 b.帮助程序保持完整性 2.垃圾收集算法 检测出垃圾对象,必须回收垃圾对象所使用的堆空间并还给程序 垃圾检测:通过建立一个根对象集合并 ...