• C#通过WebClient/HttpWebRequest实现http的POST/GET方法


    /// <summary>
    ///body是要传递的参数,格式"roleId=1&uid=2"
    ///post的cotentType填写"application/x-www-form-urlencoded"
    ///soap填写:"text/xml; charset=utf-8"
    /// </summary>
    public static string PostHttp(string url, string body, string contentType)
        {
            HttpWebRequest httpWebRequest = (HttpWebRequest)WebRequest.Create(url);
    
            httpWebRequest.ContentType = contentType;
            httpWebRequest.Method = "POST";
            httpWebRequest.Timeout = 20000;
    
            byte[] btBodys = Encoding.UTF8.GetBytes(body);
            httpWebRequest.ContentLength = btBodys.Length;
            httpWebRequest.GetRequestStream().Write(btBodys, 0, btBodys.Length);
    
            HttpWebResponse httpWebResponse = (HttpWebResponse)httpWebRequest.GetResponse();
            StreamReader streamReader = new StreamReader(httpWebResponse.GetResponseStream());
            string responseContent = streamReader.ReadToEnd();
    
            httpWebResponse.Close();
            streamReader.Close();
            httpWebRequest.Abort();
            httpWebResponse.Close();
    
            return responseContent;
        }
     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         }
     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     }
    HttpWebRequest(GET)
     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
  • 相关阅读:
    LiveBinding应用 dataBind 数据绑定
    判断当前运行的平台
    客户端如何连接 DataSnap Server 调用服务的方法
    创建DataSnap Server
    FireDACQuery FDQuery New
    BDE 退出历史 迁移至FireDAC
    窗口叉叉变灰
    c++builder XE6 Remote Debuger 远程调试
    IP Editor IP控件
    C++访问mysql数据库
  • 原文地址:https://www.cnblogs.com/devinhua/p/5578020.html
Copyright © 2020-2023  润新知