1. 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 = ;
  12.  
  13. byte[] btBodys = Encoding.UTF8.GetBytes(body);
  14. httpWebRequest.ContentLength = btBodys.Length;
  15. httpWebRequest.GetRequestStream().Write(btBodys, , 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. /// <summary>
  2. /// 通过WebClient类Post数据到远程地址,需要Basic认证;
  3. /// 调用端自己处理异常
  4. /// </summary>
  5. /// <param name="uri"></param>
  6. /// <param name="paramStr">name=张三&age=20</param>
  7. /// <param name="encoding">请先确认目标网页的编码方式</param>
  8. /// <param name="username"></param>
  9. /// <param name="password"></param>
  10. /// <returns></returns>
  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(, queryString.Length - );
  11.  
  12. HttpWebRequest httpWebRequest = (HttpWebRequest)WebRequest.Create(url + queryString);
  13.  
  14. httpWebRequest.ContentType = "application/json";
  15. httpWebRequest.Method = "GET";
  16. httpWebRequest.Timeout = ;
  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. /// <summary>
  2. /// 通过 WebRequest/WebResponse 类访问远程地址并返回结果,需要Basic认证;
  3. /// 调用端自己处理异常
  4. /// </summary>
  5. /// <param name="uri"></param>
  6. /// <param name="timeout">访问超时时间,单位毫秒;如果不设置超时时间,传入0</param>
  7. /// <param name="encoding">如果不知道具体的编码,传入null</param>
  8. /// <param name="username"></param>
  9. /// <param name="password"></param>
  10. /// <returns></returns>
  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 > )
  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方法的更多相关文章

  1. HttpWebRequest和WebClient的区别

     HttpWebRequest和WebClient的区别(From Linzheng): 1,HttpWebRequest是个抽象类,所以无法new的,需要调用HttpWebRequest.Creat ...

  2. jquery的offset().top和js的offsetTop的区别,以及jquery的offset().top的实现方法

    jquery的offset().top和js的offsetTop的区别,以及jquery的offset().top的实现方法 offset().top是JQ的方法,需要引入JQ才能使用,它获取的是你绑 ...

  3. WebClient, HttpClient, HttpWebRequest ,RestSharp之间的区别与抉择

    NETCore提供了三种不同类型用于生产的REST API: HttpWebRequest;WebClient;HttpClient,开源社区创建了另一个名为RestSharp的库.如此多的http库 ...

  4. HttpWebRequest、HttpWebResponse、HttpClient、WebClient等http网络访问类的使用示例汇总

    工作中长期需要用到通过HTTP调用API以及文件上传下载,积累了不少经验,现在将各种不同方式进行一个汇总. 首先是HttpWebRequest: /// <summary> /// 向服务 ...

  5. 精讲响应式WebClient第2篇-GET请求阻塞与非阻塞调用方法详解

    本文是精讲响应式WebClient第2篇,前篇的blog访问地址如下: 精讲响应式webclient第1篇-响应式非阻塞IO与基础用法 在上一篇文章为大家介绍了响应式IO模型和WebClient的基本 ...

  6. 方法的重写与重载的区别(Override与Overload)。重载的方法是否可以改变返回值的类型

    方法的重写(Override)与重载(Overload)的区别.重载的方法是否可以改变返回值的类型?[基础] 解释: 方法的重写overriding和重载Overloading是Java多态性的不同表 ...

  7. (转载)Recyclerview | Intent与Bundle在传值上的区别 | 设置布局背景为白色的三种方法

    用Recyclerview实现列表分组.下拉刷新以及上拉加载更多  http://www.jianshu.com/p/be62ce21ea57 Intent与Bundle在传值上的区别http://b ...

  8. HTTPWebrequest上传文件--Upload files with HTTPWebrequest (multipart/form-data)

    使用HTTPWebrequest上传文件遇到问题,可以参考Upload files with HTTPWebrequest (multipart/form-data)来解决 https://stack ...

  9. Java基础(42):Java中主类中定义方法加static和不加static的区别(前者可以省略类名直接在主方法调用,后者必须先实例化后用实例调用)

    package lsg.ap.april4th2; /* 知识点:1.Getter and Setter 的应用 2.局部变量与成员变量(也可叫做全局变量) 3.Static关键字的用法 a.成员变量 ...

随机推荐

  1. 简单使用:SpringBoot使用freemarker

    使用步骤: a : 添加依赖 b: 创建模板文件 保存位置resources/templates 目录下 文件后缀名.ftl c 编写controller 把结果传递给模板 在resources.te ...

  2. Python从零开始——集合Set

    一:Python集合知识概览 二:Python的特性.格式.以及各序列结构对比 三:Python集合set的创建 四:集合常用操作之——添加元素 五:集合常见操作之——删除元素 六:集合常见操作之—— ...

  3. 其他综合-CentOS 7 使用二进制包搭建lnmp平台

    CentOS 7 使用二进制包搭建lnmp平台 1.实验描述 通过二进制搭建 lnmp 平台,实现 web 环境基本部署 2.实验环境 虚拟机: 系统:CenOS 7.6 内存:2 G+ 数量:1台 ...

  4. AssetBundleMaster_ReadMe_CN

    在开始使用之前, 建议先导入到一个空的工程里, 通过ReadMe的一步步引导使你对整个框架以及文件结构进行熟悉, 之后再考虑导入到现有工程中使用, 完整看完教程大概需要2个小时左右. 先看看文件夹结构 ...

  5. C语言的暂停

    #include<stdio.h> int main(void) { printf("Hello, World!\n"); system("pause&quo ...

  6. 错误: 找不到或无法加载主类 com.leyou.LeyouItemApplication Process finished with exit code 1

    在IDEA的使用过程中,经常断掉服务或者重启服务,最近断掉服务重启时突然遇到了一个启动报错: 错误:找不到或无法加载主类 猜测:1,未能成功编译: 尝试:菜单--->Build--->Re ...

  7. String强制转换为Date,freemarker标签里date数据的显示问题

    String强制转换为Date,freemarker标签里date数据的显示问题 http://blog.sina.com.cn/s/blog_617f5d090101ut63.html (2014- ...

  8. 交换机端口与Mac地址绑定(基于Cisco模拟器)

    实验设备: 二层交换机一台,主机三台 实验步骤: 1.进入相应的接口 (以端口1设置Mac地址绑定,PC0接1端口举例) Switch>enable Switch#config Configur ...

  9. eclipse中查找类、方法及变量被引用的地方

    1.选中要查看的类.方法或变量,然后Ctrl+Shift+G或右键-->References--->Project,就可以找到它所有被引用的地方. 2.对于方法,还可以通过右键--> ...

  10. Linux ssh 密钥创建与验证

    1.需要两个虚拟机,每一个创建一个用户登录到用户根下   2.每个用户都要创建密钥对   3.把两个用户的公用密钥用ssh-copy-id -i 命令将公用的密钥复制到另一个用户中   4.在客户端开 ...