zoukankan      html  css  js  c++  java
  • C# 实现http实现请求请求 HttpWebRequest

      1     public class XHttpRequest
      2     {
      3         //同步方式发起http get请求
      4         public string HttpGet(string url, string queryString)
      5         {
      6             string responseData = null;
      7 
      8             if (!string.IsNullOrEmpty(queryString))
      9             {
     10                 url += "?" + queryString;
     11             }
     12 
     13             HttpWebRequest webRequest = WebRequest.Create(url) as HttpWebRequest;
     14             webRequest.Method = "GET";
     15             webRequest.ServicePoint.Expect100Continue = false;
     16             webRequest.Timeout = 20000;
     17 
     18             StreamReader responseReader = null;
     19 
     20             try
     21             {
     22                 responseReader = new StreamReader(webRequest.GetResponse().GetResponseStream());
     23                 responseData = responseReader.ReadToEnd();
     24             }
     25             catch
     26             {
     27             }
     28             finally
     29             {
     30                 webRequest.GetResponse().GetResponseStream().Close();
     31                 responseReader.Close();
     32                 responseReader = null;
     33                 webRequest = null;
     34             }
     35 
     36             return responseData;
     37         }
     38 
     39         //同步方式发起http post请求
     40         public string HttpPost(string url, string queryString)
     41         {
     42             StreamWriter requestWriter = null;
     43             StreamReader responseReader = null;
     44 
     45             string responseData = null;
     46 
     47             HttpWebRequest webRequest = WebRequest.Create(url) as HttpWebRequest;
     48             webRequest.Method = "POST";
     49             webRequest.ContentType = "application/x-www-form-urlencoded";
     50             webRequest.ServicePoint.Expect100Continue = false;
     51             webRequest.Timeout = 20000;
     52 
     53             try
     54             {             
     55                 //POST the data.
     56                 requestWriter = new StreamWriter(webRequest.GetRequestStream());
     57                 requestWriter.Write(queryString);
     58                 requestWriter.Close();
     59                 requestWriter = null;
     60 
     61                 responseReader = new StreamReader(webRequest.GetResponse().GetResponseStream());
     62                 responseData = responseReader.ReadToEnd();
     63             }
     64             catch
     65             {
     66                 throw;
     67             }
     68             finally
     69             {
     70                 if (requestWriter != null)
     71                 {
     72                     requestWriter.Close();
     73                     requestWriter = null;
     74                 }
     75 
     76                 if (responseReader != null)
     77                 {
     78                     responseReader.Close();
     79                     responseReader = null;
     80                 }
     81 
     82                 webRequest.GetResponse().GetResponseStream().Close();
     83                 webRequest = null;
     84             }
     85 
     86             return responseData;
     87         }
     88 
     89         //同步方式发起http post请求,可以同时上传文件
     90         public string HttpPostWithFile(string url, string queryString, List<Parameter> files)
     91         {
     92             Stream requestStream = null;
     93             StreamReader responseReader = null;
     94             string responseData = null;
     95             string boundary = DateTime.Now.Ticks.ToString("x");
     96             url += '?' + queryString;
     97             HttpWebRequest webRequest = WebRequest.Create(url) as HttpWebRequest;
     98             webRequest.ServicePoint.Expect100Continue = false;
     99             webRequest.Timeout = 20000;
    100             webRequest.ContentType = "multipart/form-data; boundary=" + boundary;
    101             webRequest.Method = "POST";
    102             webRequest.KeepAlive = true;
    103             webRequest.Credentials = CredentialCache.DefaultCredentials;
    104 
    105             try
    106             {
    107                 Stream memStream = new MemoryStream();
    108 
    109                 byte[] boundarybytes = System.Text.Encoding.ASCII.GetBytes("\r\n--" + boundary + "\r\n");
    110                 string formdataTemplate = "\r\n--" + boundary + "\r\nContent-Disposition: form-data; name=\"{0}\"\r\n\r\n{1}";
    111 
    112                 List<Parameter> listParams = HttpUtil.GetQueryParameters(queryString);
    113 
    114                 foreach (Parameter param in listParams)
    115                 {
    116                     string formitem = string.Format(formdataTemplate, param.Name, param.Value);
    117                     byte[] formitembytes = Encoding.UTF8.GetBytes(formitem);
    118                     memStream.Write(formitembytes, 0, formitembytes.Length);
    119                 }
    120 
    121                 memStream.Write(boundarybytes, 0, boundarybytes.Length);
    122 
    123                 string headerTemplate = "Content-Disposition: form-data; name=\"{0}\"; filename=\"{1}\"\r\nContent-Type: \"{2}\"\r\n\r\n";
    124 
    125                 foreach (Parameter param in files)
    126                 {
    127                     string name = param.Name;
    128                     string filePath = param.Value;
    129                     string file = Path.GetFileName(filePath);
    130                     string contentType = HttpUtil.GetContentType(file);
    131 
    132                     string header = string.Format(headerTemplate, name, file, contentType);
    133                     byte[] headerbytes = System.Text.Encoding.UTF8.GetBytes(header);
    134 
    135                     memStream.Write(headerbytes, 0, headerbytes.Length);
    136 
    137                     FileStream fileStream = new FileStream(filePath, FileMode.Open, FileAccess.Read);
    138                     byte[] buffer = new byte[1024];
    139                     int bytesRead = 0;
    140 
    141                     while ((bytesRead = fileStream.Read(buffer, 0, buffer.Length)) != 0)
    142                     {
    143                         memStream.Write(buffer, 0, bytesRead);
    144                     }
    145 
    146                     memStream.Write(boundarybytes, 0, boundarybytes.Length);
    147                     fileStream.Close();
    148                 }
    149 
    150                 webRequest.ContentLength = memStream.Length;
    151 
    152                 requestStream = webRequest.GetRequestStream();
    153 
    154                 memStream.Position = 0;
    155                 byte[] tempBuffer = new byte[memStream.Length];
    156                 memStream.Read(tempBuffer, 0, tempBuffer.Length);
    157                 memStream.Close();
    158                 requestStream.Write(tempBuffer, 0, tempBuffer.Length);
    159                 requestStream.Close();
    160                 requestStream = null;
    161 
    162                 responseReader = new StreamReader(webRequest.GetResponse().GetResponseStream());
    163                 responseData = responseReader.ReadToEnd();
    164             }
    165             catch (Exception ex)
    166             {
    167             }
    168             finally
    169             {
    170                 if (requestStream != null)
    171                 {
    172                     requestStream.Close();
    173                     requestStream = null;
    174                 }
    175 
    176                 if (responseReader != null)
    177                 {
    178                     responseReader.Close();
    179                     responseReader = null;
    180                 }
    181 
    182                 webRequest.GetResponse().GetResponseStream().Close();
    183                 webRequest = null;
    184             }
    185 
    186             return responseData;
    187         }
    188     }
  • 相关阅读:
    1017 A除以B (20分)**
    剑指 Offer 11. 旋转数组的最小数字(简单)
    剑指 Offer 04. 二维数组中的查找(中等)
    剑指 Offer 53
    剑指 Offer 53
    剑指 Offer 03. 数组中重复的数字(简单)
    剑指 Offer 58
    剑指 Offer 05. 替换空格(简单)
    执行npm install命令出错问题
    剑指 Offer 35. 复杂链表的复制(中等)
  • 原文地址:https://www.cnblogs.com/CodeBase/p/2609826.html
Copyright © 2011-2022 走看看