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

     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     }
    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         }
    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     }
    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
    basic验证的WebRequest/WebResponse
  • 相关阅读:
    linux权限补充:rwt rwT rws rwS 特殊权限
    关于Linux操作系统下文件特殊权限的解释
    Java学习笔记——Java程序运行超时后退出或进行其他操作的实现
    Java实现 蓝桥杯 算法提高 判断名次
    Java实现 蓝桥杯 算法提高 判断名次
    Java实现 蓝桥杯 算法提高 日期计算
    Java实现 蓝桥杯 算法提高 日期计算
    Java实现 蓝桥杯 算法提高 概率计算
    Java实现 蓝桥杯 算法提高 概率计算
    Java实现 蓝桥杯 算法提高 复数四则运算
  • 原文地址:https://www.cnblogs.com/shadowtale/p/3372735.html
Copyright © 2011-2022 走看看