日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > C# >内容正文

C#

C# HttpHelper帮助类,真正的Httprequest请求时无视编码,无视证书,无视Cookie,网页抓取...

發布時間:2025/4/5 C# 50 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C# HttpHelper帮助类,真正的Httprequest请求时无视编码,无视证书,无视Cookie,网页抓取... 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
//取當前webBrowser登錄后的Cookie值
????????[DllImport("wininet.dll",?CharSet?=?CharSet.Auto,?SetLastError?=?true)]
????????static?extern?bool?InternetGetCookieEx(string?pchURL,?string?pchCookieName,?StringBuilder?pchCookieData,?ref?int?pcchCookieData,?int?dwFlags,?object?lpReserved);

????????//取出Cookie,當登錄后才能取
????????private?static?string?GetCookieString(string?url)
????????{
????????????//?Determine?the?size?of?the?cookie?????
????????????int?datasize?=?256;
????????????StringBuilder?cookieData?=?new?StringBuilder(datasize);
????????????if?(!InternetGetCookieEx(url,?null,?cookieData,?ref?datasize,?0x00002000,?null))
????????????{
????????????????if?(datasize?<?0)
????????????????????return?null;
????????????????//?Allocate?stringbuilder?large?enough?to?hold?the?cookie?????
????????????????cookieData?=?new?StringBuilder(datasize);
????????????????if?(!InternetGetCookieEx(url,?null,?cookieData,?ref?datasize,?0x00002000,?null))
????????????????????return?null;
????????????}
????????????return?cookieData.ToString();
????????}之前我寫過篇關于C#?HttpWebRequest?絕技的文章?無視證書的方法請在篇文章里面查找謝謝,以下不做無視證書的方法

無論是Get還是Post?帶Cookie,編碼問題解決?,這里完全做到了無視編碼的問題

最近把上面的方法整理了一下,這個類相當于一個SqlHelper類一下,我把它叫做HttpHelper類,以后還會慢慢更新,希望大家多我支持,

給大家分享一下吧,不好的地方感謝大家留言指正,不多說了上代碼吧!

///?<summary>
///?類說明:HttpHelps類,用來實現Http訪問,Post或者Get方式的,直接訪問,帶Cookie的,帶證書的等方式
///?編碼日期:2011-08-20
///?</summary>
using?System;
using?System.Collections.Generic;
using?System.Linq;
using?System.Text;
using?System.Net;
using?System.IO;
using?System.Text.RegularExpressions;
using?System.IO.Compression;

public?class?HttpHelps
{
????#region?預定義方法或者變更

????//默認的編碼
????private?Encoding?encoding?=?Encoding.Default;
????//HttpWebRequest對象用來發起請求
????private?HttpWebRequest?request?=?null;
????//獲取影響流的數據對象
????private?HttpWebResponse?response?=?null;
????//讀取流的對象
????private?StreamReader?reader?=?null;
????//需要返回的數據對象
????private?string?returnData?=?"String?Error";

????///?<summary>
????
///?根據相傳入的數據,得到相應頁面數據
????
///?</summary>
????
///?<param?name="strPostdata">傳入的數據Post方式,get方式傳NUll或者空字符串都可以</param>
????
///?<returns>string類型的響應數據</returns>
????private?string?GetHttpRequestData(string?strPostdata)
????{
????????try
????????{
????????????//支持跳轉頁面,查詢結果將是跳轉后的頁面
????????????request.AllowAutoRedirect?=?true;

????????????//驗證在得到結果時是否有傳入數據
????????????if?(!string.IsNullOrEmpty(strPostdata)?&&?request.Method.Trim().ToLower().Contains("post"))
????????????{
????????????????byte[]?buffer?=?encoding.GetBytes(strPostdata);
????????????????request.ContentLength?=?buffer.Length;
????????????????request.GetRequestStream().Write(buffer,?0,?buffer.Length);
????????????}

????????????#region?得到請求的response

????????????using?(response?=?(HttpWebResponse)request.GetResponse())
????????????{
????????????????//從這里開始我們要無視編碼了
????????????????if?(encoding?==?null)
????????????????{
????????????????????MemoryStream?_stream?=?new?MemoryStream();

????????????????????if?(response.ContentEncoding?!=?null?&&?response.ContentEncoding.Equals("gzip",?StringComparison.InvariantCultureIgnoreCase))
????????????????????{
????????????????????????//開始讀取流并設置編碼方式
????????????????????????new?GZipStream(response.GetResponseStream(),?CompressionMode.Decompress).CopyTo(_stream,?10240);
????????????????????}
????????????????????else
????????????????????{
????????????????????????response.GetResponseStream().CopyTo(_stream,?10240);
????????????????????}
????????????????????byte[]?RawResponse?=?_stream.ToArray();
????????????????????string?temp?=?Encoding.Default.GetString(RawResponse,?0,?RawResponse.Length);
????????????????????//<meta(.*?)charset([\s]?)=[^>](.*?)>
????????????????????Match?meta?=?Regex.Match(temp,?"<meta([^<]*)charset=([^<]*)[\"']",?RegexOptions.IgnoreCase?|?RegexOptions.Multiline);
????????????????????string?charter?=?(meta.Groups.Count?>?2)???meta.Groups[2].Value?:?string.Empty;
????????????????????charter?=?charter.Replace("\"",?string.Empty).Replace("'",?string.Empty).Replace(";",?string.Empty);
????????????????????if?(charter.Length?>?0)
????????????????????{
????????????????????????encoding?=?Encoding.GetEncoding(charter);
????????????????????}
????????????????????else
????????????????????{
????????????????????????if?(response.CharacterSet.ToLower().Trim()?==?"iso-8859-1")
????????????????????????{
????????????????????????????encoding?=?Encoding.GetEncoding("gbk");
????????????????????????}
????????????????????????else
????????????????????????{
????????????????????????????if?(string.IsNullOrEmpty(response.CharacterSet.Trim()))
????????????????????????????{
????????????????????????????????encoding?=?Encoding.UTF8;
????????????????????????????}
????????????????????????????else
????????????????????????????{
encoding?=?Encoding.GetEncoding(response.CharacterSet);
????????????????????????????}
????????????????????????}
????????????????????}
????????????????????returnData?=?encoding.GetString(RawResponse);
????????????????}
????????????????else
????????????????{
????????????????????if?(response.ContentEncoding?!=?null?&&?response.ContentEncoding.Equals("gzip",?StringComparison.InvariantCultureIgnoreCase))
????????????????????{
????????????????????????//開始讀取流并設置編碼方式
????????????????????????using?(reader?=?new?StreamReader(new?GZipStream(response.GetResponseStream(),?CompressionMode.Decompress),?encoding))
????????????????????????{
????????????????????????????returnData?=?reader.ReadToEnd();
????????????????????????}
????????????????????}
????????????????????else
????????????????????{
????????????????????????//開始讀取流并設置編碼方式
????????????????????????using?(reader?=?new?StreamReader(response.GetResponseStream(),?encoding))
????????????????????????{
????????????????????????????returnData?=?reader.ReadToEnd();
????????????????????????}
????????????????????}
????????????????}
????????????}

????????????#endregion
????????}
????????catch?(Exception)
????????{
????????????//這里是在發生異常時返回的錯誤信息
????????????returnData?=?"String?Error";
????????}
????????return?returnData.ToLower();
????}


轉載于:https://www.cnblogs.com/Simcoder/archive/2011/11/05/2237252.html

總結

以上是生活随笔為你收集整理的C# HttpHelper帮助类,真正的Httprequest请求时无视编码,无视证书,无视Cookie,网页抓取...的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。