1. 程式人生 > >C# HttpWebRequest GET HTTP HTTPS 請求

C# HttpWebRequest GET HTTP HTTPS 請求

這個需求來自於我最近練手的一個專案,在專案中我需要將一些自己發表的和收藏整理的網文集中到一個地方存放,如果全部採用手工操作工作量大而且繁瑣,因此周公決定利用C#來實現。在很多地方都需要驗證使用者身份才可以進行下一步操作,這就免不了POST請求來登入,在實際過程中發現有些網站登入是HTTPS形式的,在解決過程中遇到了一些小問題,現在跟大家分享。
通用輔助類
下面是我編寫的一個輔助類,在這個類中採用了HttpWebRequest中傳送GET/HTTP/HTTPS請求,因為有的時候需要獲取認證資訊(如Cookie),所以返回的是HttpWebResponse物件,有了返回的HttpWebResponse例項,可以獲取登入過程中返回的會話資訊,也可以獲取響應流。
程式碼如下:

複製程式碼 複製程式碼
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 

相關推薦

C# HttpWebRequest GET HTTP HTTPS 請求

這個需求來自於我最近練手的一個專案,在專案中我需要將一些自己發表的和收藏整理的網文集中到一個地方存放,如果全部採用手工操作工作量大而且繁瑣,因此周公決定利用C#來實現。在很多地方都需要驗證使用者身份才可以進行下一步操作,這就免不了POST請求來登入,在實際過程中發現有些網

c# HttpWebRequest 模擬HTTP post 傳遞JSON參數

bytes trac dll esp system get nbsp memory http //HTTP post JSON 參數 private string HttpPost(string Url, Object ticket) {

Jmeter Web 性能測試入門 (二):Fiddler 抓取 http/https 請求

功能 wrap 3-9 req safari itl box 移動 移動設備 jmeter自帶了攔截request的功能,並且也有對應的tool:badboy 可以用。但由於我經常做移動端的項目,個人還是習慣用fiddler來收集request。 官網下載並安裝Fiddle

C#中Get和Post請求的同步及異步方法

iter epo charset result string pty streambuf div httpget 在C#中發起Http請求一般使用HttpWebRequest這個類,下文將使用這個HttpWebRequest對象來對Get和Post的同步及異步請求進行封裝:

使用谷歌瀏覽器開發者工具分析 http/https 請求耗時

web1、打開工具2、各部分的含義 參考文章:https://developers.google.com/web/tools/chrome-devtools/network-performance/reference#timing-explanation使用谷歌瀏覽器開發者工具分析 http/https 請求

C#發Get或Post請求請求html頁面

C#發Get或Post請求來請求html頁面 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; u

Python爬蟲入門之二HTTP(HTTPS)請求與響應

HTTP和HTTPS HTTP協議(HyperText Transfer Protocol,超文字傳輸協議):是一種釋出和接收 HTML頁面的方法。 HTTPS(Hypertext Transfer Protocol over Secure Socket Layer)簡單講是HTTP的安全版,在HTTP下

C#中Get和Post請求的同步及非同步方法

在C#中發起Http請求一般使用HttpWebRequest這個類,下文將使用這個HttpWebRequest物件來對Get和Post的同步及非同步請求進行封裝: 新建HttpRequestHelper類: public static class H

C# 後臺傳送http post請求

/// <summary>         /// 後臺傳送post請求         /// </summary>         /// <param name="url">請求地址</param>         ///

Charles如何抓取http/https請求

charles ,我們親切的把它稱作茶壺,功能還是十分強大的,尤其是在mac上無法使用fiddler更是。。 其實很容易上手,下載安裝,手機設定下ip代理不久可以了嘛?但是你發現包為https的時候就不那麼容易了,所以寫一個教程,也是自己設定的過程記錄下來。順便把正常htt

java實現 HTTP/HTTPS請求繞過證書檢測程式碼實現

1、開發需求 需要實現在服務端發起HTTP/HTTPS請求,訪問其他程式資源。 2、URLConnection和HTTPClient的比較 HttpClient是個很不錯的開源框架,封裝了訪問http的請求頭,引數,內容體,響應等等, De

錄製web或者手機app的http/https請求

1. Web錄製1.1 電腦上設定web代理jmeter錄製web請求需要在電腦上設定web代理,設定方法如下:1.1.1 mac系統系統偏好設定 -> 網路 -> 代理 -> Web

http https請求工具類

1 import java.io.BufferedReader; 2 import java.io.InputStream; 3 import java.io.InputStreamReader; 4 import java.io.OutputStream;

C# HttpWebRequest\HttpWebResponse\WebClient傳送請求解析json資料

====================================================================================================================================== ///

十分鐘學會Charles抓包(iOS的http/https請求)

Charles安裝HTTP抓包HTTPS抓包1. Charles安裝2. HTTP抓包(1)檢視電腦IP地址(2)設定手機HTTP代理手機連上電腦,點選“設定->無線區域網->連線的WiFi”,設定HTTP代理:伺服器為電腦IP地址:如192.168.1.169埠:8888設定代理後,需要在電腦上

Qt發起Http/Https請求

我們 cati 查看 sch 變量 app font manage 下載 1. BurpSuite抓包1.1 設置代理burpsuite代理設置瀏覽器代理設置(chrome),其他瀏覽器同理。地址欄輸入 chrome://settings/,打開代理設置設置代理端口如果使用

C# 發送Http協議 模擬 Post Get請求

head log cnblogs cep bsp empty read ram color 1.參數 paramsValue的格式 要和 Reques.ContentType一致, 如果 contentype "application/x-www-form-urlenco

HttpUtils 發送HTTP/HTTPS/{get/post}請求

nbsp 發送 pac protocol stat utils urn googl pcl import java.io.IOException; import org.apache.http.HttpEntity; import org.apache.http.Htt

C++:C語言實現HTTPGET和POST請求例程參考 C++:C語言實現HTTPGET和POST請求

C++:C語言實現HTTP的GET和POST請求   閱讀目錄   HTTP請求和IP/TCP   實現GET請求   實現POST請求:   參考: 回到頂部

C#如何進行httpsGET與POST請求以及照片上傳

針對HTTPS的請求我們需要額外處理一下證書,廢話不多少直接程式碼貼給大家! using System; using System.Collections.Generic; using System.Linq; using System.Text; using System