【原创】标准HTTP请求工具类
以下是个人在项目开发过程中,总结的Http请求工具类,主要包括四种:
1.处理http POST请求【XML格式、无解压】;
2.处理http GET请求【XML格式、无解压】;
3.处理http POST请求【可以解压】;
4.处理http GET请求【可以解压】。
1 using System; 2 using System.Collections.Generic; 3 using System.IO; 4 using System.IO.Compression; 5 using System.Linq; 6 using System.Net; 7 using System.Net.Security; 8 using System.Security.Cryptography.X509Certificates; 9 using System.Text; 10 using System.Threading.Tasks; 11 12 namespace Common 13 { 14 public class HttpService 15 { 16 public static bool CheckValidationResult(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors errors) 17 { 18 //直接确认,否则打不开 19 return true; 20 } 21 22 #region 1.处理http POST请求【XML格式、无解压】 23 /// <summary> 24 /// 处理http POST请求【XML格式、无解压】 25 /// </summary> 26 /// <param name="xml">请求参数</param> 27 /// <param name="url">请求接口地址</param> 28 /// <param name="timeout">设置超时时间</param> 29 /// <returns>http POST成功后返回的数据,失败抛WebException异常</returns> 30 public static string PostXMLRequest(string xml, string url, int timeout = 16) 31 { 32 System.GC.Collect();//垃圾回收,回收没有正常关闭的http连接 33 34 string result = "";//返回结果 35 36 HttpWebRequest request = null; 37 HttpWebResponse response = null; 38 Stream reqStream = null; 39 40 try 41 { 42 //设置最大连接数 43 ServicePointManager.DefaultConnectionLimit = 200; 44 //设置https验证方式 45 if (url.StartsWith("https", StringComparison.OrdinalIgnoreCase)) 46 { 47 ServicePointManager.ServerCertificateValidationCallback = 48 new RemoteCertificateValidationCallback(CheckValidationResult); 49 } 50 51 /*************************************************************** 52 * 下面设置HttpWebRequest的相关属性 53 * ************************************************************/ 54 request = (HttpWebRequest)WebRequest.Create(url); 55 56 request.Method = "POST"; 57 request.Timeout = timeout * 1000; 58 59 //设置POST的数据类型和长度 60 request.ContentType = "text/xml"; 61 byte[] data = System.Text.Encoding.UTF8.GetBytes(xml); 62 request.ContentLength = data.Length; 63 64 //往服务器写入数据 65 reqStream = request.GetRequestStream(); 66 reqStream.Write(data, 0, data.Length); 67 reqStream.Close(); 68 69 //获取服务端返回 70 response = (HttpWebResponse)request.GetResponse(); 71 72 //获取服务端返回数据 73 StreamReader sr = new StreamReader(response.GetResponseStream(), Encoding.UTF8); 74 result = sr.ReadToEnd().Trim(); 75 sr.Close(); 76 } 77 catch (System.Threading.ThreadAbortException e) 78 { 79 System.Threading.Thread.ResetAbort(); 80 } 81 catch (WebException e) 82 { 83 84 85 } 86 catch (Exception e) 87 { 88 89 } 90 finally 91 { 92 //关闭连接和流 93 if (response != null) 94 { 95 response.Close(); 96 } 97 if (request != null) 98 { 99 request.Abort(); 100 } 101 } 102 return result; 103 } 104 #endregion 105 106 #region 2.处理http GET请求【XML格式、无解压】 107 /// <summary> 108 /// 处理http GET请求【XML格式、无解压】 109 /// </summary> 110 /// <param name="url">请求的url地址</param> 111 /// <returns>http GET成功后返回的数据,失败抛WebException异常</returns> 112 public static string GetXMLRequest(string url) 113 { 114 System.GC.Collect(); 115 string result = ""; 116 117 HttpWebRequest request = null; 118 HttpWebResponse response = null; 119 120 //请求url以获取数据 121 try 122 { 123 //设置最大连接数 124 ServicePointManager.DefaultConnectionLimit = 200; 125 //设置https验证方式 126 if (url.StartsWith("https", StringComparison.OrdinalIgnoreCase)) 127 { 128 ServicePointManager.ServerCertificateValidationCallback = 129 new RemoteCertificateValidationCallback(CheckValidationResult); 130 } 131 132 /*************************************************************** 133 * 下面设置HttpWebRequest的相关属性 134 * ************************************************************/ 135 request = (HttpWebRequest)WebRequest.Create(url); 136 137 request.Method = "GET"; 138 139 //获取服务器返回 140 response = (HttpWebResponse)request.GetResponse(); 141 142 //获取HTTP返回数据 143 StreamReader sr = new StreamReader(response.GetResponseStream(), Encoding.UTF8); 144 result = sr.ReadToEnd().Trim(); 145 sr.Close(); 146 } 147 catch (System.Threading.ThreadAbortException e) 148 { 149 150 System.Threading.Thread.ResetAbort(); 151 } 152 catch (WebException e) 153 { 154 155 156 } 157 158 finally 159 { 160 //关闭连接和流 161 if (response != null) 162 { 163 response.Close(); 164 } 165 if (request != null) 166 { 167 request.Abort(); 168 } 169 } 170 return result; 171 } 172 #endregion 173 174 #region 3.处理http POST请求【可以解压】 175 /// <summary> 176 /// 处理http POST请求【可以解压】 177 /// </summary> 178 /// <param name="param">请求参数</param> 179 /// <param name="url">请求接口地址</param> 180 /// <param name="timeout">设置超时时间</param> 181 /// <returns>http POST成功后返回的数据,失败抛WebException异常</returns> 182 public static string Post(string param, string url, int timeout = 16) 183 { 184 System.GC.Collect();//垃圾回收,回收没有正常关闭的http连接 185 186 string result = "";//返回结果 187 188 HttpWebRequest request = null; 189 HttpWebResponse response = null; 190 Stream reqStream = null; 191 StreamReader sr = null; 192 try 193 { 194 //设置最大连接数 195 ServicePointManager.DefaultConnectionLimit = 200; 196 197 /*************************************************************** 198 * 下面设置HttpWebRequest的相关属性 199 * ************************************************************/ 200 request = (HttpWebRequest)WebRequest.Create(url); 201 202 request.Method = "POST"; 203 request.Timeout = timeout * 1000; 204 205 //设置POST的数据类型 206 request.ContentType = "application/x-www-form-urlencoded;charset=UTF-8"; 207 208 byte[] data = System.Text.Encoding.UTF8.GetBytes(param); 209 210 request.UserAgent = "Mozilla/4.0"; 211 request.Headers.Add("Accept-Encoding", "gzip, deflate"); 212 213 //设置POST的数据长度 214 request.ContentLength = data.Length; 215 216 //往服务器写入数据 217 reqStream = request.GetRequestStream(); 218 reqStream.Write(data, 0, data.Length); 219 reqStream.Close(); 220 221 //获取服务端返回 222 response = (HttpWebResponse)request.GetResponse(); 223 224 //获取服务端返回数据 225 if (response.ContentEncoding.ToLower() == "gzip")//如果使用了GZip则先解压 226 { 227 using (Stream streamReceive = response.GetResponseStream()) 228 { 229 using (var zipStream = new GZipStream(streamReceive, CompressionMode.Decompress)) 230 { 231 using (sr = new StreamReader(zipStream, Encoding.UTF8)) 232 { 233 result = sr.ReadToEnd(); 234 } 235 } 236 } 237 } 238 else 239 { 240 using (Stream streamReceive = response.GetResponseStream()) 241 { 242 using (sr = new StreamReader(streamReceive, Encoding.UTF8)) 243 { 244 result = sr.ReadToEnd(); 245 } 246 } 247 } 248 249 sr.Close(); 250 } 251 catch (System.Threading.ThreadAbortException e) 252 { 253 254 System.Threading.Thread.ResetAbort(); 255 } 256 catch (WebException e) 257 { 258 259 } 260 catch (Exception e) 261 { 262 263 } 264 finally 265 { 266 //关闭连接和流 267 if (response != null) 268 { 269 response.Close(); 270 } 271 if (request != null) 272 { 273 request.Abort(); 274 } 275 } 276 return result; 277 } 278 #endregion 279 280 #region 4.处理http GET请求【可以解压】 281 /// <summary> 282 /// 处理http GET请求【可以解压】 283 /// </summary> 284 /// <param name="url">请求的url地址</param> 285 /// <returns>http GET成功后返回的数据,失败抛WebException异常</returns> 286 public static string Get(string url) 287 { 288 System.GC.Collect(); 289 string result = ""; 290 291 HttpWebRequest request = null; 292 HttpWebResponse response = null; 293 StreamReader sr = null; 294 295 //请求url以获取数据 296 try 297 { 298 //设置最大连接数 299 ServicePointManager.DefaultConnectionLimit = 200; 300 301 /*************************************************************** 302 * 下面设置HttpWebRequest的相关属性 303 * ************************************************************/ 304 request = (HttpWebRequest)WebRequest.Create(url); 305 306 request.Method = "GET"; 307 308 //获取服务器返回 309 response = (HttpWebResponse)request.GetResponse(); 310 311 //获取HTTP返回数据 312 //获取服务端返回数据 313 if (response.ContentEncoding.ToLower() == "gzip")//如果使用了GZip则先解压 314 { 315 using (Stream streamReceive = response.GetResponseStream()) 316 { 317 using (var zipStream = 318 new GZipStream(streamReceive, CompressionMode.Decompress)) 319 { 320 using (sr = new StreamReader(zipStream, Encoding.UTF8)) 321 { 322 result = sr.ReadToEnd(); 323 } 324 } 325 } 326 } 327 else 328 { 329 using (Stream streamReceive = response.GetResponseStream()) 330 { 331 using (sr = new StreamReader(streamReceive, Encoding.UTF8)) 332 { 333 result = sr.ReadToEnd(); 334 } 335 } 336 } 337 sr.Close(); 338 } 339 catch (System.Threading.ThreadAbortException e) 340 { 341 342 System.Threading.Thread.ResetAbort(); 343 } 344 catch (WebException e) 345 { 346 347 if (e.Status == WebExceptionStatus.ProtocolError) 348 { 349 350 } 351 352 } 353 catch (Exception e) 354 { 355 356 } 357 finally 358 { 359 //关闭连接和流 360 if (response != null) 361 { 362 response.Close(); 363 } 364 if (request != null) 365 { 366 request.Abort(); 367 } 368 } 369 return result; 370 } 371 #endregion 372 } 373 }