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的更多相关文章

  1. [深入浅出WP8.1(Runtime)]网络编程之HttpClient类

    12.2 网络编程之HttpClient类 除了可以使用HttpWebRequest类来实现HTTP网络请求之外,我们还可以使用HttpClient类来实现.对于基本的请求操作,HttpClient类 ...

  2. 网络编程之HttpClient类(转)

    12.2 网络编程之HttpClient类 除了可以使用HttpWebRequest类来实现HTTP网络请求之外,我们还可以使用HttpClient类来实现.对于基本的请求操作,HttpClient类 ...

  3. 网络编程之TCP/IP各层详解

    网络编程之TCP/IP各层详解 我们将应用层,表示层,会话层并作应用层,从TCP/IP五层协议的角度来阐述每层的由来与功能,搞清楚了每层的主要协议,就理解了整个物联网通信的原理. 首先,用户感知到的只 ...

  4. 网络编程之Socket & ServerSocket

    网络编程之Socket & ServerSocket Socket:网络套接字,网络插座,建立网络通信连接至少要一对端口号(socket).socket本质是编程接口(API),对TCP/IP ...

  5. GO语言的进阶之路-网络编程之socket

    GO语言的进阶之路-网络编程之socket 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.什么是socket; 在说socket之前,我们要对两个概念要有所了解,就是IP和端口 ...

  6. [深入浅出Cocoa]iOS网络编程之Socket

    http://blog.csdn.net/kesalin/article/details/8798039 版权声明:本文为博主原创文章,未经博主允许不得转载.   目录(?)[+]   [深入浅出Co ...

  7. Android网络编程之HttpClient运用

    Android网络编程之HttpClient运用 在 Android开发中我们经常会用到网络连接功能与服务器进行数据的交互,为此Android的SDK提供了Apache的HttpClient来方便我们 ...

  8. 网络编程之Socket代码实例

    网络编程之Socket代码实例 一.基本Socket例子 Server端: # Echo server program import socket HOST = '' # Symbolic name ...

  9. 网络编程之C10K

    网络编程之C10K 虽然在过去的十几年里C10K问题已经可以很好的解决,但学习网络编程时研究C10K问题仍然价值巨大,因为技术的发展都是有规律和线索可循的,了解C10K问题及其解决思路,通过举一反三, ...

随机推荐

  1. 【上海站】EOLINKER 用户培训之旅,等你来共建API新连接

    从今年3月4日起,EOLINKER AMS 团队将再次开启全国用户培训之旅.本次全国培训之旅依旧将覆盖北上广深等国内主要城市,重点提供两种服务内容,一是 对 EOLINKER 产品的交流,包括 API ...

  2. 蓝桥-区间K大数查询

    问题描述: 给定一个序列,每次询问序列中第l个数到第r个数中第K大的数是哪个. 输入格式 第一行包含一个数n,表示序列长度. 第二行包含n个正整数,表示给定的序列. 第三个包含一个正整数m,表示询问个 ...

  3. C语言实现截屏

    实现手机控制电脑执行部分功能需要获取桌面状态,在网上找的一段截屏代码 /** * GDI 截屏函数 * 参数 hwnd 要截屏的窗口句柄 * 参数 dirPath 截图存放目录 * 参数 filena ...

  4. 解决Scrapy抓取中文网页保存为json文件时中文不显示而是显示unicode的问题

    注意:此方法跟之前保存成json文件的写法有少许不同之处,注意区分 情境再现: 使用scrapy抓取中文网页,得到的数据类型是unicode,在控制台输出的话也是显示unicode,如下所示 {'au ...

  5. DOMContentLoaded 与onload区别以及使用

    一.何时触发这两个事件? 1.当 onload 事件触发时,页面上所有的DOM,样式表,脚本,图片,flash都已经加载完成了. 2.当 DOMContentLoaded 事件触发时,仅当DOM加载完 ...

  6. Django——1 环境搭建

    Django 什么是Django 使用前的准备工作 新建项目 开启服务器 新建APP 简单实战 什么是Django框架 http服务器:用来接受用户请求,并将请求转发给web应用框架进行处理.Web应 ...

  7. 【Codeforces 158A】Next Round

    [链接] 我是链接,点我呀:) [题意] 让你找到排名的前k名,并列的话,如果分数大于0那么就算晋级 问你最后有多少人可以晋级. [题解] 按照题意模拟就好, 先按照a[max] = a[k]的规则找 ...

  8. in与exists的区别

    转载自:http://blog.csdn.net/lick4050312/article/details/4476333 select * from Awhere id in(select id fr ...

  9. 洛谷——P2639 [USACO09OCT]Bessie的体重问题Bessie's We…

    https://www.luogu.org/problem/show?pid=2639 题目描述 Bessie像她的诸多姊妹一样,因为从Farmer John的草地吃了太多美味的草而长出了太多的赘肉. ...

  10. Mac下OpenCV开发

    1.         环境搭建 a)       安装Homebrew i.            下载地址:http://github.com/mxcl/homebrew/tarball/maste ...