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问题及其解决思路,通过举一反三, ...
随机推荐
- hdu 1584 蜘蛛纸牌
把小的牌放到大的牌上,求最小移动的距离和 DFS遍历所有的可能,把每一张牌与之要移动的牌都进行两层for的循环,注意回溯条件满足立刻break 代码(算法借鉴) #include <bits/s ...
- Windows压缩包安装MySQL
一.下载zip版本 下载网址(如果浏览器下载很慢可以使用迅雷) http://dev.mysql.com/downloads/mysql/ 二.解压将得到的文件放置到任意目录 如果解压后的文件里没有d ...
- Huawei-R&S-网络工程师实验笔记20190609-VLAN划分综合(Access和Trunk端口)
>Huawei-R&S-网络工程师实验笔记20190609-VLAN划分综合(Access和Trunk端口) >>实验开始,先上拓扑图参考: >>>实验目标 ...
- TypeError: CleanWebpackPlugin is not a constructor
在项目中引入clean-webpack-plugin打包后报错 new CleanWebpackPlugin(), ^ TypeError: CleanWebpackPlugin is not a c ...
- 深入浅出了解HTTP协议
深入浅出了解HTTP协议
- 【Codeforces 349B】Color the Fence
[链接] 我是链接,点我呀:) [题意] 让你组成一个只由1~9组成的数字 每个数字需要的paint数字给定. 让你组成一个最大的数字,且所有数字的paint的总和不超过v. [题解] 先求出a中的最 ...
- 暑假集训D16总结
考试 日常爆炸= = T1 一看就是个树规,然而不会写方程= = T2 一看就是个分块,然而不会分= = T3 终于有点头绪,推了两个小时的30分部分分情况,然后打挂了= = 我玩个鬼啊 其实听完,觉 ...
- [cogs396] [网络流24题#4] 魔术球 [网络流,最大流,最小路径覆盖]
本题枚举每多一个球需要多少个柱子,可以边加边边计算,每次只需要判断$i-Dinic()$即可:特别注意边界. #include <iostream> #include <algori ...
- 用c实现shell排序
shell排序的方法又称缩小增量法,是对直接插入排序法的改进.至于对于分组后采用哪种排序方法实现,本例采用直接选择排序和直接插入排序,理论上讲,通过分组排序后,数据基本上有序,这时通过直接插入排序会比 ...
- MSXML2
The following C/C++ example creates and appends a new text node to the root document element. #impor ...