首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> ASP.NET 基礎 >> 關於ASP.NET

開心網輔助程式開發手記(一):HTTP 模擬登入與核心 HttpHelper 實作

     編輯:關於ASP.NET

開發前置工具與核心類庫

開發網頁自動化輔助程式,核心在於 HTTP 請求模擬。必備工具:

  • Http Analyzer V3:抓包分析請求/回應封包。
  • Firefox + Firebug:前端 DOM、JS、網路分析。

HttpHelper 核心實作

封裝 HttpWebRequest,支援 Cookie 容器、自定義 Header、編碼、User-Agent 等:

public class HttpHelper
{
    private CookieContainer cc;
    private string contentType = "application/x-www-form-urlencoded";
    private string userAgent = "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 2.0.50727)";
    private Encoding encoding = Encoding.GetEncoding("utf-8");

    public CookieContainer CookieContainer => cc;
    public Encoding Encoding { get => encoding; set => encoding = value; }

    public HttpHelper() { cc = new CookieContainer(); }
    public HttpHelper(CookieContainer cc) { this.cc = cc; }

    /// 
    /// 統一請求入口
    /// 
    public string GetHtml(string url, string postData, bool isPost, CookieContainer cookieContainer)
    {
        byte[] byteRequest = Encoding.Default.GetBytes(postData ?? "");
        HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url);
        req.CookieContainer = cookieContainer;
        req.ContentType = contentType;
        req.Referer = url;
        req.Accept = accept;
        req.UserAgent = userAgent;
        req.Method = isPost ? "POST" : "GET";
        if (isPost)
        {
            req.ContentLength = byteRequest.Length;
            using (Stream stream = req.GetRequestStream())
                stream.Write(byteRequest, 0, byteRequest.Length);
        }
        using (HttpWebResponse resp = (HttpWebResponse)req.GetResponse())
        using (Stream respStream = resp.GetResponseStream())
        using (StreamReader reader = new StreamReader(respStream, encoding))
            return reader.ReadToEnd();
    }
    // 多載方法省略...
}

此類別為後續所有功能(登入、獲取車位、貼條等)提供統一的網路通訊基礎,體現了「封裝變化」的設計原則。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved