热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

C#HttpWebRequest和WebClient的区别通过WebClient/HttpWebRequest实现http的post/get方法

1body是要传递的参数,格式roleId1&uid22post的cotentType填写:3applicationx-www-form-urlencoded4soap填写
一 HttpWebReques
1,HttpWebRequest是个抽象类,所以无法new的,需要调用HttpWebRequest.Create();
2,其Method指定了请求类型,这里用的GET,还有POST;也可以指定ConentType;
3,其请求的Uri必须是绝对地址;
4,其请求是异步回调方式的,从BeginGetResponse开始,并通过AsyncCallback指定回调方法;
二 WebClient
1,WebClient 方式使用基于事件的异步编程模型,在HTTP响应返回时引发的WebClient回调是在UI线程中调用的,因此可用于更新UI元素的属性,
例如把 HTTP响应中的数据绑定到UI的指定控件上进行显示。HttpWebRequest是基于后台进程运行的,回调不是UI线程,所以不能直接对UI进行操作,通常使用Dispatcher.BeginInvoke()跟界面进行通讯。
技术分享图片技术分享图片
 1 //body是要传递的参数,格式"roleId=1&uid=2"
 2 //post的cotentType填写:
 3 //"application/x-www-form-urlencoded"
 4 //soap填写:"text/xml; charset=utf-8"
 5     public static string PostHttp(string url, string body, string contentType)
 6     {
 7         HttpWebRequest httpWebRequest = (HttpWebRequest)WebRequest.Create(url);
 8 
 9         httpWebRequest.COntentType= contentType;
10         httpWebRequest.Method = "POST";
11         httpWebRequest.Timeout = 20000;
12 
13         byte[] btBodys = Encoding.UTF8.GetBytes(body);
14         httpWebRequest.COntentLength= btBodys.Length;
15         httpWebRequest.GetRequestStream().Write(btBodys, 0, btBodys.Length);
16 
17         HttpWebResponse httpWebRespOnse= (HttpWebResponse)httpWebRequest.GetResponse();
18         StreamReader streamReader = new StreamReader(httpWebResponse.GetResponseStream());
19         string respOnseContent= streamReader.ReadToEnd();
20 
21         httpWebResponse.Close();
22         streamReader.Close();
23         httpWebRequest.Abort();
24         httpWebResponse.Close();
25 
26         return responseContent;
27     }
28 
29 POST方法(httpWebRequest)
POST方法(httpWebRequest)
技术分享图片技术分享图片
 1 /// 
 2         /// 通过WebClient类Post数据到远程地址,需要Basic认证;
 3         /// 调用端自己处理异常
 4         /// 
 5         /// 
 6         /// name=张三&age=20
 7         /// 请先确认目标网页的编码方式
 8         /// 
 9         /// 
10         /// 
11         public static string Request_WebClient(string uri, string paramStr, Encoding encoding, string username, string password)
12         {
13             if (encoding == null)
14                 encoding = Encoding.UTF8;
15 
16             string result = string.Empty;
17 
18             WebClient wc = new WebClient();
19 
20             // 采取POST方式必须加的Header
21             wc.Headers.Add("Content-Type", "application/x-www-form-urlencoded");
22 
23             byte[] postData = encoding.GetBytes(paramStr);
24 
25             if (!string.IsNullOrEmpty(username) && !string.IsNullOrEmpty(password))
26             {
27                 wc.Credentials = GetCredentialCache(uri, username, password);
28                 wc.Headers.Add("Authorization", GetAuthorization(username, password));
29             }
30 
31             byte[] respOnseData= wc.UploadData(uri, "POST", postData); // 得到返回字符流
32             return encoding.GetString(responseData);// 解码                  
33         }
34 
35 POST方法(WebClient)
POST方法(WebClient)
技术分享图片技术分享图片
 1 public static string GetHttp(string url, HttpContext httpContext)
 2     {
 3         string queryString = "?";
 4 
 5         foreach (string key in httpContext.Request.QueryString.AllKeys)
 6         {
 7             queryString += key + "=" + httpContext.Request.QueryString[key] + "&";
 8         }
 9 
10         queryString = queryString.Substring(0, queryString.Length - 1);
11 
12         HttpWebRequest httpWebRequest = (HttpWebRequest)WebRequest.Create(url + queryString);
13 
14         httpWebRequest.COntentType= "application/json";
15         httpWebRequest.Method = "GET";
16         httpWebRequest.Timeout = 20000;
17 
18         //byte[] btBodys = Encoding.UTF8.GetBytes(body);
19         //httpWebRequest.COntentLength= btBodys.Length;
20         //httpWebRequest.GetRequestStream().Write(btBodys, 0, btBodys.Length);
21 
22         HttpWebResponse httpWebRespOnse= (HttpWebResponse)httpWebRequest.GetResponse();
23         StreamReader streamReader = new StreamReader(httpWebResponse.GetResponseStream());
24         string respOnseContent= streamReader.ReadToEnd();
25 
26         httpWebResponse.Close();
27         streamReader.Close();
28 
29         return responseContent;
30     }
31 
32 Get方法(HttpWebRequest)
Get方法(HttpWebRequest)
技术分享图片技术分享图片
 1 /// 
 2         /// 通过 WebRequest/WebResponse 类访问远程地址并返回结果,需要Basic认证;
 3         /// 调用端自己处理异常
 4         /// 
 5         /// 
 6         /// 访问超时时间,单位毫秒;如果不设置超时时间,传入0
 7         /// 如果不知道具体的编码,传入null
 8         /// 
 9         /// 
10         /// 
11         public static string Request_WebRequest(string uri, int timeout, Encoding encoding, string username, string password)
12         {
13             string result = string.Empty;
14 
15             WebRequest request = WebRequest.Create(new Uri(uri));
16 
17             if (!string.IsNullOrEmpty(username) && !string.IsNullOrEmpty(password))
18             {
19                 request.Credentials = GetCredentialCache(uri, username, password);
20                 request.Headers.Add("Authorization", GetAuthorization(username, password));
21             }
22 
23             if (timeout > 0)
24                 request.Timeout = timeout;
25 
26             WebResponse respOnse= request.GetResponse();
27             Stream stream = response.GetResponseStream();
28             StreamReader sr = encoding == null ? new StreamReader(stream) : new StreamReader(stream, encoding);
29 
30             result = sr.ReadToEnd();
31 
32             sr.Close();
33             stream.Close();
34 
35             return result;
36         }
37 
38         #region # 生成 Http Basic 访问凭证 #
39 
40         private static CredentialCache GetCredentialCache(string uri, string username, string password)
41         {
42             string authorization = string.Format("{0}:{1}", username, password);
43 
44             CredentialCache credCache = new CredentialCache();
45             credCache.Add(new Uri(uri), "Basic", new NetworkCredential(username, password));
46 
47             return credCache;
48         }
49 
50         private static string GetAuthorization(string username, string password)
51         {
52             string authorization = string.Format("{0}:{1}", username, password);
53 
54             return "Basic " + Convert.ToBase64String(new ASCIIEncoding().GetBytes(authorization));
55         }
56 
57         #endregion
58 
59 basic验证的WebRequest/WebResponse
basic验证的WebRequest/WebResponse

C# HttpWebRequest和WebClient的区别 通过WebClient/HttpWebRequest实现http的post/get方法


推荐阅读
  • 知识图谱——机器大脑中的知识库
    本文介绍了知识图谱在机器大脑中的应用,以及搜索引擎在知识图谱方面的发展。以谷歌知识图谱为例,说明了知识图谱的智能化特点。通过搜索引擎用户可以获取更加智能化的答案,如搜索关键词"Marie Curie",会得到居里夫人的详细信息以及与之相关的历史人物。知识图谱的出现引起了搜索引擎行业的变革,不仅美国的微软必应,中国的百度、搜狗等搜索引擎公司也纷纷推出了自己的知识图谱。 ... [详细]
  • 本文介绍了lua语言中闭包的特性及其在模式匹配、日期处理、编译和模块化等方面的应用。lua中的闭包是严格遵循词法定界的第一类值,函数可以作为变量自由传递,也可以作为参数传递给其他函数。这些特性使得lua语言具有极大的灵活性,为程序开发带来了便利。 ... [详细]
  • 本文介绍了C#中数据集DataSet对象的使用及相关方法详解,包括DataSet对象的概述、与数据关系对象的互联、Rows集合和Columns集合的组成,以及DataSet对象常用的方法之一——Merge方法的使用。通过本文的阅读,读者可以了解到DataSet对象在C#中的重要性和使用方法。 ... [详细]
  • 本文介绍了OC学习笔记中的@property和@synthesize,包括属性的定义和合成的使用方法。通过示例代码详细讲解了@property和@synthesize的作用和用法。 ... [详细]
  • 本文内容为asp.net微信公众平台开发的目录汇总,包括数据库设计、多层架构框架搭建和入口实现、微信消息封装及反射赋值、关注事件、用户记录、回复文本消息、图文消息、服务搭建(接入)、自定义菜单等。同时提供了示例代码和相关的后台管理功能。内容涵盖了多个方面,适合综合运用。 ... [详细]
  • 搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的详细步骤
    本文详细介绍了搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的步骤,包括环境说明、相关软件下载的地址以及所需的插件下载地址。 ... [详细]
  • HDU 2372 El Dorado(DP)的最长上升子序列长度求解方法
    本文介绍了解决HDU 2372 El Dorado问题的一种动态规划方法,通过循环k的方式求解最长上升子序列的长度。具体实现过程包括初始化dp数组、读取数列、计算最长上升子序列长度等步骤。 ... [详细]
  • 本文介绍了C#中生成随机数的三种方法,并分析了其中存在的问题。首先介绍了使用Random类生成随机数的默认方法,但在高并发情况下可能会出现重复的情况。接着通过循环生成了一系列随机数,进一步突显了这个问题。文章指出,随机数生成在任何编程语言中都是必备的功能,但Random类生成的随机数并不可靠。最后,提出了需要寻找其他可靠的随机数生成方法的建议。 ... [详细]
  • http:my.oschina.netleejun2005blog136820刚看到群里又有同学在说HTTP协议下的Get请求参数长度是有大小限制的,最大不能超过XX ... [详细]
  • 在重复造轮子的情况下用ProxyServlet反向代理来减少工作量
    像不少公司内部不同团队都会自己研发自己工具产品,当各个产品逐渐成熟,到达了一定的发展瓶颈,同时每个产品都有着自己的入口,用户 ... [详细]
  • ASP.NET2.0数据教程之十四:使用FormView的模板
    本文介绍了在ASP.NET 2.0中使用FormView控件来实现自定义的显示外观,与GridView和DetailsView不同,FormView使用模板来呈现,可以实现不规则的外观呈现。同时还介绍了TemplateField的用法和FormView与DetailsView的区别。 ... [详细]
  • CentOS 7部署KVM虚拟化环境之一架构介绍
    本文介绍了CentOS 7部署KVM虚拟化环境的架构,详细解释了虚拟化技术的概念和原理,包括全虚拟化和半虚拟化。同时介绍了虚拟机的概念和虚拟化软件的作用。 ... [详细]
  • 本文介绍了一种解析GRE报文长度的方法,通过分析GRE报文头中的标志位来计算报文长度。具体实现步骤包括获取GRE报文头指针、提取标志位、计算报文长度等。该方法可以帮助用户准确地获取GRE报文的长度信息。 ... [详细]
  • 本文介绍了如何使用C#制作Java+Mysql+Tomcat环境安装程序,实现一键式安装。通过将JDK、Mysql、Tomcat三者制作成一个安装包,解决了客户在安装软件时的复杂配置和繁琐问题,便于管理软件版本和系统集成。具体步骤包括配置JDK环境变量和安装Mysql服务,其中使用了MySQL Server 5.5社区版和my.ini文件。安装方法为通过命令行将目录转到mysql的bin目录下,执行mysqld --install MySQL5命令。 ... [详细]
  • CentOS 6.5安装VMware Tools及共享文件夹显示问题解决方法
    本文介绍了在CentOS 6.5上安装VMware Tools及解决共享文件夹显示问题的方法。包括清空CD/DVD使用的ISO镜像文件、创建挂载目录、改变光驱设备的读写权限等步骤。最后给出了拷贝解压VMware Tools的操作。 ... [详细]
author-avatar
路很长别太狂_297
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有