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. 使用ruamel.yaml库,解析yaml文件

    在实现的需求如下: 同事提供了一个文本文件,内含200多个host与ip的对应关系,希望能在k8s生成pod时,将这些对应关系注入到/etc/hosts中. 网上看文档,这可以通过扩充pod中的hos ...

  2. Codeforces 1278F: Cards

    题目传送门:CF1278F. 题意简述: 有 \(n\) 个独立随机变量 \(x_i\),每个随机变量都有 \(p = 1/m\) 的概率取 \(1\),有 \((1-p)\) 的概率取 \(0\). ...

  3. 在 Oracle 中使用正则表达式

    Oracle使用正则表达式离不开这4个函数: 1.regexp_like 2.regexp_substr 3.regexp_instr 4.regexp_replace 看函数名称大概就能猜到有什么用 ...

  4. Mybatis ResultMap多表映射DTO

    解决问题:n+1问题,之前我的习惯是拿到单表里面的数据,然后遍历,再拿到一个与其他表对应的逻辑上的外键,然后for循环去查找其他表的数据(原因是数据量小,没有在意,还有主要是不想建外键,你知道的,外键 ...

  5. zz致力于变革未来的智能技术

    有 R-CNN SPPNet Fast R-CNN Faster R-CNN ... 的论文翻译 现在已经不能访问了...     [私人整理]空间金字塔池化网络SPPNet详解 SPP-Net是出自 ...

  6. python cookbook3

    1.算GC含量 def validate_base_sequence(base_sequence, RNAflag = False): #判断序列是否只含有A.T.G.C.U seq = base_s ...

  7. MACbook安装WIN7中文版后乱码的解决办法

    控制面板→时钟.语言和区域→区域和语言→管理→更改系统区域设置→选择为中国,简体中文→确定,按照要求你重启即可. 原来这个本子是香港买的,默认区域是英语,我说怎么乱码.

  8. [LeetCode] 743. Network Delay Time 网络延迟时间

    There are N network nodes, labelled 1 to N. Given times, a list of travel times as directededges tim ...

  9. [LeetCode] 29. Divide Two Integers 两数相除

    Given two integers dividend and divisor, divide two integers without using multiplication, division ...

  10. [灯火阑珊] 关于cmd命令里的findstr匹配多个关键词

    no raining now go to school and play with code 你. findstr "\<go  code\>" 这样就能匹配输出包含g ...