• webrequesthelper


    我用的不错的webrequesthelper

    using System;
    using System.Collections.Generic;
    using System.IO;
    using System.IO.Compression;
    using System.Linq;
    using System.Net;
    using System.Net.Security;
    using System.Security.Cryptography.X509Certificates;
    using System.Text;
    
    namespace Component.Extension
    {
        static public class WebRequestHelper
        {
            #region 发送POST
    
            /// <summary>
            /// Post请求
            /// </summary>
            /// <param name="url"></param>
            /// <param name="sParaTemp"></param>
            /// <param name="isThrowException"></param>
            /// <returns></returns>
            public static string SendPostRequest(string url, IDictionary<string, string> sParaTemp,bool isThrowException=false)
            {
                
                return SendPostRequest((HttpWebRequest)WebRequest.Create(url), Encoding.UTF8, sParaTemp, isThrowException);
            }
    
            /// <summary>
            ///  Post请求
            /// </summary>
            /// <param name="url"></param>
            /// <param name="encoding"></param>
            /// <param name="sParaTemp"></param>
            /// <param name="isThrowException"></param>
            /// <returns></returns>
            public static string SendPostRequest(string url, Encoding encoding, IDictionary<string, string> sParaTemp, bool isThrowException = false)
            {
               return SendPostRequest((HttpWebRequest) WebRequest.Create(url), encoding, sParaTemp, isThrowException);
            }
    
            /// <summary>
            ///  Post请求
            /// </summary>
            /// <param name="url"></param>
            /// <param name="encoding"></param>
            /// <param name="isThrowException"></param>
            /// <returns></returns>
            public static string SendGetRequest(string url, Encoding encoding, bool isThrowException = false)
            {
                return SendRequest((HttpWebRequest)WebRequest.Create(url), encoding, null,"get", isThrowException);
            }
    
            /// <summary>
            ///  Post请求
            /// </summary>
            /// <param name="myReq"></param>
            /// <param name="encoding"></param>
            /// <param name="sParaTemp"></param>
            /// <param name="isThrowException"></param>
            /// <returns></returns>
            public static string SendPostRequest(HttpWebRequest myReq, Encoding encoding, IDictionary<string, string> sParaTemp, bool isThrowException = false)
            {
                return SendRequest(myReq, encoding, sParaTemp, "post", isThrowException);
            }
    
            /// <summary>
            /// 
            /// </summary>
            /// <param name="myReq"></param>
            /// <param name="encoding"></param>
            /// <param name="sParaTemp"></param>
            /// <param name="method"></param>
            /// <param name="isThrowException"></param>
            /// <returns></returns>
            public static string SendRequest(HttpWebRequest myReq, Encoding encoding, IDictionary<string, string> sParaTemp,string method, bool isThrowException=false)
            {
                var sPara = new StringBuilder();
                if (sParaTemp != null && sParaTemp.Count > 0)
                {
                    var @params = string.Join("&", sParaTemp.ToList().Select(it => $"{it.Key}={it.Value}"));
                    sPara = new StringBuilder(@params);
                    //foreach (var val in sParaTemp)
                    //{
                    //    //string.Join("&", $"{val.Key}={val.Value}");
                    //    sPara.AppendFormat("{0}={1}&", val.Key, val.Value);
                    //}
                    //sPara.Remove(sPara.Length - 1, 1);
                }
                myReq.ContentType = "application/x-www-form-urlencoded";
                myReq.Method = method;
                return SendRequest(myReq, encoding, sPara.ToString(), isThrowException);
            }
    
            /// <summary>
            /// 
            /// </summary>
            /// <param name="myReq"></param>
            /// <param name="encoding"></param>
            /// <param name="content"></param>
            /// <param name="isThrowException"></param>
            /// <returns></returns>
            public static string SendRequest(HttpWebRequest myReq, Encoding encoding, string content, bool isZip, bool isThrowException = false)
            {
                if (isThrowException)
                    return Request(myReq, encoding, content,false);
                try
                {
                    return Request(myReq, encoding, content, false);
                }
                catch (WebException ex) // 这样我们就能捕获到异常,并且获取服务器端的输出
                {
                    if (ex.Response == null)
                        throw ex;
                    var wenReq = (HttpWebResponse)ex.Response;
                    if (wenReq == null)
                        throw ex;
                    var myStream = wenReq.GetResponseStream();
                    if (myStream == null)
                        throw ex;
                    if (isZip)
                    {
                        myStream = new GZipStream(myStream, CompressionMode.Decompress);
                    }
                    using (var reader = new StreamReader(myStream, encoding))
                    {
                        return reader.ReadToEnd();
                    }
    
                }
                catch (Exception ex)
                {
    
                }
                return null;
            }
    
            /// <summary>
            /// 
            /// </summary>
            /// <param name="myReq"></param>
            /// <param name="encoding"></param>
            /// <param name="content"></param>
            /// <param name="isZip"></param>
            /// <returns></returns>
            public static string Request(HttpWebRequest myReq, Encoding encoding, string content,bool isZip)
            {
                ServicePointManager.Expect100Continue = true;
                if (ServicePointManager.SecurityProtocol != 0)
                    ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls | SecurityProtocolType.Ssl3 |
                                                           (SecurityProtocolType)768 | (SecurityProtocolType)3072;
                //request.ProtocolVersion = HttpVersion.Version10;
                ServicePointManager.ServerCertificateValidationCallback =
                    (a, b, c, d) => true;
                if (!string.IsNullOrWhiteSpace(content))
                {
                    byte[] bytesRequestData = encoding.GetBytes(content);
                    myReq.ContentLength = bytesRequestData.Length;
                    var requestStream = myReq.GetRequestStream();
                    requestStream.Write(bytesRequestData, 0, bytesRequestData.Length);
                    requestStream.Close();
                }
                var httpWResp = (HttpWebResponse)myReq.GetResponse();
                var myStream = httpWResp.GetResponseStream();
                if (myStream == null)
                    return null;
                if (isZip)
                {
                    myStream = new GZipStream(myStream, CompressionMode.Decompress);
                }
                var reader = new StreamReader(myStream, encoding);
                var result = reader.ReadToEnd();
                myStream.Close();
                return result;
    
            }
    
    
            /// <summary>
            ///  Post请求
            /// </summary>
            /// <param name="url"></param>
            /// <param name="encoding"></param>
            /// <param name="content"></param>
            /// <param name="contentType"></param>
            /// <returns></returns>
            public static string SendPostRequest(string url, Encoding encoding, string content, string contentType= "application/x-www-form-urlencoded")
            {
                var request = (HttpWebRequest)WebRequest.Create(url);
                request.ContentType= contentType;
                return SendPostRequest(request, encoding, content);
            }
        
            /// <summary>
            ///  Post请求
            /// </summary>
            /// <param name="myReq"></param>
            /// <param name="encoding"></param>
            /// <param name="content"></param>
            /// <returns></returns>
            public static string SendPostRequest(HttpWebRequest myReq, Encoding encoding, string content)
            {
                myReq.Method = "POST";
                return SendRequest(myReq, encoding, content,false);
            }
         
            #endregion
    
            #region 证书服务
          
            /// <summary>
            /// 创建带证书设置的httpwebrequest
            /// </summary>
            /// <param name="url">请求地址</param>
            /// <param name="certFileName">证书名全路径</param>
            /// <param name="certPassword">证书密码</param>
            /// <returns></returns>
            public static WebRequest CreateWebRequestWithCertificate(string url, string certFileName, string certPassword)
            {
    
                HttpWebRequest request = null;
                var cert = CreateX509Certificate(certFileName, certPassword);
                if (cert != null)
                {
                    request = (HttpWebRequest)WebRequest.Create(url);
                    request.ClientCertificates.Add(cert);
                }
    
                return request;
            }
            /// <summary>
            /// 获取指定证书
            /// </summary>
            /// <param name="certFileName">证书名全路径</param>
            /// <param name="certPassword">证书密码</param>
            /// <returns></returns>
            public static X509Certificate2 CreateX509Certificate(string certFileName, string certPassword)
            {
                X509Certificate2 cer = new X509Certificate2(certFileName, certPassword,
    X509KeyStorageFlags.MachineKeySet | X509KeyStorageFlags.PersistKeySet | X509KeyStorageFlags.Exportable);
                return cer;
            }
            #endregion
        }
    }
    

      

  • 相关阅读:
    通过实验窥探javascript的解析执行顺序
    HTML5实战与剖析之原生拖拽(四可拖动dragable属性和其他成员)
    Google Guava之Optional优雅的使用null
    sharding-jdbc源码学习(一)简介
    重构——改善既有代码的设计
    spring自定义标签
    java自定义注解
    开源项目集合
    Lombok引入简化Java代码
    设计模式之建造者模式
  • 原文地址:https://www.cnblogs.com/CnnBlog/p/11662702.html
Copyright © 2020-2023  润新知