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. Python编码格式导致的csv读取错误

    Python编码格式导致的csv读取错误(pandas.read_csv) 本文记录python小白我今天遇到的这两个问题(csv.reader和pandas.csv_read): pandas模块“ ...

  2. Opencv学习之路—Opencv下基于HOG特征的KNN算法分类训练

    在计算机视觉研究当中,HOG算法和LBP算法算是基础算法,但是却十分重要.后期很多图像特征提取的算法都是基于HOG和LBP,所以了解和掌握HOG,是学习计算机视觉的前提和基础. HOG算法的原理很多资 ...

  3. LOJ——#6277. 数列分块入门 1

    ~~推荐播客~~ 「分块」数列分块入门1 – 9 by hzwer 浅谈基础根号算法——分块 博主蒟蒻,有缘人可直接观摩以上大佬的博客... #6277. 数列分块入门 1 题目大意: 给出一个长为 ...

  4. Django基础配置

    安装djangopip install Django==1.11.4进入pythonimport django查看版本号django.get_version()创建项目,在合适位置创建一个目录进入你要 ...

  5. NLTK学习笔记(六):利用机器学习进行文本分类

    目录 一.监督式分类:建立在训练语料基础上的分类 特征提取器和朴素贝叶斯分类器 过拟合:当特征过多 错误分析 二.实例:文本分类和词性标注 文本分类 词性标注:"决策树"分类器 三 ...

  6. Android MMS数据库存储说明

    数据表 MMS模块总共包含17张表:addr.android_metadata.attachments.canonical_addresses.drm.part.pdu.pending_msgs.ra ...

  7. [转]如何有效地报告Bug

    英文原文:Simon Tatham,编译:Dasn 引言 为公众写过软件的人,大概都收到过很拙劣的bug报告,例如: 在报告中说“不好用”: 所报告内容毫无意义: 在报告中用户没有提供足够的信息: 在 ...

  8. hdu 4046 树状数组

    #include<stdio.h> #include<string.h> #define N  51000 char s[N]; int a[N],n; int number( ...

  9. Java 和JS Base64加密

    项目在登录.注册等场景实现时,经常会用到用户信息前端加密,然后项目后端二次解密,避免信息直接在浏览器上以明文显示. 本文主要介绍了base64加密的方式处理代码,不支持中文 源码如下: base64. ...

  10. poj 1635

    有根树同构.参考论文<hash在....> #include <iostream> #include <fstream> #include <algorith ...