• C# Http请求(GET/HTTP/HTTPS)


    using System;  
    using System.Collections.Generic;  
    using System.Linq;  
    using System.Text;  
    using System.Net.Security;  
    using System.Security.Cryptography.X509Certificates;  
    using System.DirectoryServices.Protocols;  
    using System.ServiceModel.Security;  
    using System.Net;  
    using System.IO;  
    using System.IO.Compression;  
    using System.Text.RegularExpressions;  
    
    namespace BaiduCang  
    {  
       /// <summary>  
       /// 有关HTTP请求的辅助类  
       /// </summary>  
       public class HttpWebResponseUtility  
       {  
           private static readonly string DefaultUserAgent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; SV1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)";  
           /// <summary>  
           /// 创建GET方式的HTTP请求  
           /// </summary>  
           /// <param name="url">请求的URL</param>  
           /// <param name="timeout">请求的超时时间</param>  
           /// <param name="userAgent">请求的客户端浏览器信息,可以为空</param>  
           /// <param name="cookies">随同HTTP请求发送的Cookie信息,如果不需要身份验证可以为空</param>  
           /// <returns></returns>  
           public static HttpWebResponse CreateGetHttpResponse(string url,int? timeout, string userAgent,CookieCollection cookies)  
           {  
               if (string.IsNullOrEmpty(url))  
               {  
                   throw new ArgumentNullException("url");  
               }  
               HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest;  
               request.Method = "GET";  
               request.UserAgent = DefaultUserAgent;  
               if (!string.IsNullOrEmpty(userAgent))  
               {  
                   request.UserAgent = userAgent;  
               }  
               if (timeout.HasValue)  
               {  
                   request.Timeout = timeout.Value;  
               }  
               if (cookies != null)  
               {  
                   request.CookieContainer = new CookieContainer();  
                   request.CookieContainer.Add(cookies);  
               }  
               return request.GetResponse() as HttpWebResponse;  
           }  
           /// <summary>  
           /// 创建POST方式的HTTP请求  
           /// </summary>  
           /// <param name="url">请求的URL</param>  
           /// <param name="parameters">随同请求POST的参数名称及参数值字典</param>  
           /// <param name="timeout">请求的超时时间</param>  
           /// <param name="userAgent">请求的客户端浏览器信息,可以为空</param>  
           /// <param name="requestEncoding">发送HTTP请求时所用的编码</param>  
           /// <param name="cookies">随同HTTP请求发送的Cookie信息,如果不需要身份验证可以为空</param>  
           /// <returns></returns>  
           public static HttpWebResponse CreatePostHttpResponse(string url,IDictionary<string,string> parameters,int? timeout, string userAgent,Encoding requestEncoding,CookieCollection cookies)  
           {  
               if (string.IsNullOrEmpty(url))  
               {  
                   throw new ArgumentNullException("url");  
               }  
               if(requestEncoding==null)  
               {  
                   throw new ArgumentNullException("requestEncoding");  
               }  
               HttpWebRequest request=null;  
               //如果是发送HTTPS请求  
               if(url.StartsWith("https",StringComparison.OrdinalIgnoreCase))  
               {  
                   ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(CheckValidationResult);  
                   request = WebRequest.Create(url) as HttpWebRequest;  
                   request.ProtocolVersion=HttpVersion.Version10;  
               }  
               else 
               {  
                   request = WebRequest.Create(url) as HttpWebRequest;  
               }  
               request.Method = "POST";  
               request.ContentType = "application/x-www-form-urlencoded";  
                 
               if (!string.IsNullOrEmpty(userAgent))  
               {  
                   request.UserAgent = userAgent;  
               }  
               else 
               {  
                   request.UserAgent = DefaultUserAgent;  
               }  
    
               if (timeout.HasValue)  
               {  
                   request.Timeout = timeout.Value;  
               }  
               if (cookies != null)  
               {  
                   request.CookieContainer = new CookieContainer();  
                   request.CookieContainer.Add(cookies);  
               }  
               //如果需要POST数据  
               if(!(parameters==null||parameters.Count==0))  
               {  
                   StringBuilder buffer = new StringBuilder();  
                   int i = 0;  
                   foreach (string key in parameters.Keys)  
                   {  
                       if (i > 0)  
                       {  
                           buffer.AppendFormat("&{0}={1}", key, parameters[key]);  
                       }  
                       else 
                       {  
                           buffer.AppendFormat("{0}={1}", key, parameters[key]);  
                       }  
                       i++;  
                   }  
                   byte[] data = requestEncoding.GetBytes(buffer.ToString());  
                   using (Stream stream = request.GetRequestStream())  
                   {  
                       stream.Write(data, 0, data.Length);  
                   }  
               }  
               return request.GetResponse() as HttpWebResponse;  
           }  
    
           private static bool CheckValidationResult(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors errors)  
           {  
               return true; //总是接受  
           }  
       }  
    }
  • 相关阅读:
    泛型
    内部类 及 匿名内部类
    BigDecimal
    JodaTime简介
    Java中IO流
    Spring的ApplicationEvent的使用
    swagger文档使用(springboot项目)
    http连接过程遇到的各种性能瓶颈
    http网络连接过程
    python中的TypeError: 'NavigableString' object is not callable错误
  • 原文地址:https://www.cnblogs.com/zuiyirenjian/p/3354487.html
Copyright © 2020-2023  润新知