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

简介: using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.
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; //总是接受  
       }  
   }  
}

 

相关文章
|
2月前
|
安全 API 网络安全
使用OkHttp进行HTTPS请求的Kotlin实现
使用OkHttp进行HTTPS请求的Kotlin实现
|
2月前
|
前端开发 JavaScript Java
如何捕获和处理HTTP GET请求的异常
如何捕获和处理HTTP GET请求的异常
|
2月前
|
存储 缓存 网络协议
计算机网络常见面试题(二):浏览器中输入URL返回页面过程、HTTP协议特点,GET、POST的区别,Cookie与Session
计算机网络常见面试题(二):浏览器中输入URL返回页面过程、HTTP协议特点、状态码、报文格式,GET、POST的区别,DNS的解析过程、数字证书、Cookie与Session,对称加密和非对称加密
|
2月前
|
缓存 安全 API
http 的 get 和 post 区别 1000字
【10月更文挑战第27天】GET和POST方法各有特点,在实际应用中需要根据具体的业务需求和场景选择合适的请求方法,以确保数据的安全传输和正确处理。
|
3月前
|
存储 JSON API
HTTP 请求与响应处理:C#中的实践
【10月更文挑战第4天】在现代Web开发中,HTTP协议至关重要,无论构建Web应用还是API开发,都需要熟练掌握HTTP请求与响应处理。本文从C#角度出发,介绍HTTP基础知识,包括请求与响应结构,并通过`HttpClient`库演示如何发送GET请求及处理响应,同时分析常见错误并提供解决方案,助你更高效地完成HTTP相关任务。
141 2
|
3月前
|
JSON 编解码 安全
【HTTP】方法(method)以及 GET 和 POST 的区别
【HTTP】方法(method)以及 GET 和 POST 的区别
143 1
|
3月前
|
XML JSON 前端开发
C#使用HttpClient四种请求数据格式:json、表单数据、文件上传、xml格式
C#使用HttpClient四种请求数据格式:json、表单数据、文件上传、xml格式
740 0
|
3月前
|
安全 网络安全 数据安全/隐私保护
HTTPS 请求中的证书验证详解(Python版)
HTTPS 请求中的证书验证详解(Python版)
252 0
|
6月前
|
存储 运维 Java
函数计算产品使用问题之如何使用Python的requests库向HTTP服务器发送GET请求
阿里云Serverless 应用引擎(SAE)提供了完整的微服务应用生命周期管理能力,包括应用部署、服务治理、开发运维、资源管理等功能,并通过扩展功能支持多环境管理、API Gateway、事件驱动等高级应用场景,帮助企业快速构建、部署、运维和扩展微服务架构,实现Serverless化的应用部署与运维模式。以下是对SAE产品使用合集的概述,包括应用管理、服务治理、开发运维、资源管理等方面。
112 8
|
5月前
|
JavaScript 前端开发 Java
【Azure 环境】各种语言版本或命令,发送HTTP/HTTPS的请求合集
【Azure 环境】各种语言版本或命令,发送HTTP/HTTPS的请求合集