zoukankan      html  css  js  c++  java
  • C# HttpWebRequest和WebClient的区别 通过WebClient/HttpWebRequest实现http的post/get方法

    一 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 /// <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(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 /// <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 > 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
  • 相关阅读:
    Java基础语法
    Struts2--带参数的结果集
    Struts2--Dynamic Result动态结果集
    Struts2--Global Result全局结果集
    Struts2--Result类型
    Struts2--默认Action
    Struts2--模块包含
    Struts2--访问web元素
    puppeteer 填充基础表单
    animejs 动画库
  • 原文地址:https://www.cnblogs.com/kliine/p/10168506.html
Copyright © 2011-2022 走看看