程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> ASP.NET >> 關於ASP.NET >> 開心網輔助程序開發手記

開心網輔助程序開發手記

編輯:關於ASP.NET

聲明:本人只在業余空閒時間寫寫《開心網輔助程序》,目的只是學習!

由於之前有寫過類似的程序,也寫過相關的文章介紹過(C#網站登錄學習筆記(一):登錄簡單網站、C#網站登錄學習筆記(二):訪問需登錄後才能訪問的頁面),這次寫起“開心網輔助程序”也可以算是得心應手了,直接從電腦中翻出塵封已久的HttpHelper(前面提到的兩篇文章就是居於這個操作類進行的),稍微分析了一下網頁結構(爭車位),就寫起程序來了!

在開始寫手記前,讓我們看看寫這樣的“外掛”程序需要准備什麼軟件?

1. 抓包工具:Http Analyzer V3。既然要實現的是Http模擬請求,抓包工具肯定少不了了

2. 網頁分析工具:Firefox 3.0 + Firebug 1.2.1。沒錯,可愛的火狐狸又來幫忙了

在這篇手記中,將簡單的介紹一下如何登錄開心網、獲取爭車位相關數據。

一、稍微修改了一下HttpHelper類的代碼:

Code

using System;
using System.Collections.Generic;
using System.Text;
using System.Net;
using System.IO;
  
namespace SNSHelper.Common
{
  class HttpHelper
  {
    #region 私有變量
    private CookieContainer cc;
    private string contentType = "application/x-www-form-urlencoded";
    private string accept = "image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/x-silverlight, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-ms-application, application/x-ms-xbap, application/vnd.ms-xpsdocument, application/xaml+xml, application/x-silverlight-2-b1, */*";
    private string userAgent = "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 2.0.50727; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022)";
    private Encoding encoding = Encoding.GetEncoding("utf-8");
    #endregion
  
    #region 屬性
    /// <summary>
    /// Cookie容器
    /// </summary>
    public CookieContainer CookieContainer
    {
      get
      {
        return cc;
      }
    }
  
    /// <summary>
    /// 獲取網頁源碼時使用的編碼
    /// </summary>
    /// <value></value>
    public Encoding Encoding
    {
      get
      {
        return encoding;
      }
      set
      {
        encoding = value;
      }
    }
    #endregion
  
    #region 構造函數
    /// <summary>
    /// Initializes a new instance of the <see cref="HttpHelper"/> class.
    /// </summary>
    public HttpHelper()
    {
      cc = new CookieContainer();
    }
  
    /// <summary>
    /// Initializes a new instance of the <see cref="HttpHelper"/> class.
    /// </summary>
    /// <param name="cc">The cc.</param>
    public HttpHelper(CookieContainer cc)
    {
      this.cc = cc;
    }
  
    /// <summary>
    /// Initializes a new instance of the <see cref="HttpHelper"/> class.
    /// </summary>
    /// <param name="contentType">Type of the content.</param>
    /// <param name="accept">The accept.</param>
    /// <param name="userAgent">The user agent.</param>
    public HttpHelper(string contentType, string accept, string userAgent)
    {
      this.contentType = contentType;
      this.accept = accept;
      this.userAgent = userAgent;
    }
  
    /// <summary>
    /// Initializes a new instance of the <see cref="HttpHelper"/> class.
    /// </summary>
    /// <param name="cc">The cc.</param>
    /// <param name="contentType">Type of the content.</param>
    /// <param name="accept">The accept.</param>
    /// <param name="userAgent">The user agent.</param>
    public HttpHelper(CookieContainer cc, string contentType, string accept, string userAgent)
    {
      this.cc = cc;
      this.contentType = contentType;
      this.accept = accept;
      this.userAgent = userAgent;
    }
    #endregion
  
    #region 公共方法
    /// <summary>
    /// 獲取指定頁面的HTML代碼
    /// </summary>
    /// <param name="url">指定頁面的路徑</param>
    /// <param name="postData">回發的數據</param>
    /// <param name="isPost">是否以post方式發送請求</param>
    /// <param name="cookieCollection">Cookie集合</param>
    /// <returns></returns>
    public string GetHtml(string url, string postData, bool isPost, CookieContainer cookieContainer)
    {
      if (string.IsNullOrEmpty(postData))
      {
        return GetHtml(url, cookieContainer);
      }
  
      byte[] byteRequest = Encoding.Default.GetBytes(postData);
  
      HttpWebRequest httpWebRequest;
      httpWebRequest = (HttpWebRequest)HttpWebRequest.Create(url);
  
      httpWebRequest.CookieContainer = cookieContainer;
      httpWebRequest.ContentType = contentType;
      httpWebRequest.Referer = url;
      httpWebRequest.Accept = accept;
      httpWebRequest.UserAgent = userAgent;
      httpWebRequest.Method = isPost ? "POST" : "GET";
      httpWebRequest.ContentLength = byteRequest.Length;
  
      Stream stream = httpWebRequest.GetRequestStream();
      stream.Write(byteRequest, 0, byteRequest.Length);
      stream.Close();
  
      HttpWebResponse httpWebResponse;
      httpWebResponse = (HttpWebResponse)httpWebRequest.GetResponse();
      Stream responseStream = httpWebResponse.GetResponseStream();
      StreamReader streamReader = new StreamReader(responseStream, encoding);
      string html = streamReader.ReadToEnd();
      streamReader.Close();
      responseStream.Close();
  
      return html;
    }
  
    /// <summary>
    /// 獲取指定頁面的HTML代碼
    /// </summary>
    /// <param name="url">指定頁面的路徑</param>
    /// <param name="cookieCollection">Cookie集合</param>
    /// <returns></returns>
    public string GetHtml(string url, CookieContainer cookieContainer)
    {
      HttpWebRequest httpWebRequest;
  
      httpWebRequest = (HttpWebRequest)HttpWebRequest.Create(url);
      httpWebRequest.CookieContainer = cookieContainer;
      httpWebRequest.ContentType = contentType;
      httpWebRequest.Referer = url;
      httpWebRequest.Accept = accept;
      httpWebRequest.UserAgent = userAgent;
      httpWebRequest.Method = "GET";
  
      HttpWebResponse httpWebResponse;
      httpWebResponse = (HttpWebResponse)httpWebRequest.GetResponse();
      Stream responseStream = httpWebResponse.GetResponseStream();
      StreamReader streamReader = new StreamReader(responseStream, encoding);
      string html = streamReader.ReadToEnd();
      streamReader.Close();
      responseStream.Close();
  
      return html;
    }
    /// <summary>
    /// 獲取指定頁面的HTML代碼
    /// </summary>
    /// <param name="url">指定頁面的路徑</param>
    /// <returns></returns>
    public string GetHtml(string url)
    {
      return GetHtml(url, cc);
    }
  
    /// <summary>
    /// 獲取指定頁面的HTML代碼
    /// </summary>
    /// <param name="url">指定頁面的路徑</param>
    /// <param name="postData">回發的數據</param>
    /// <param name="isPost">是否以post方式發送請求</param>
    /// <returns></returns>
    public string GetHtml(string url, string postData, bool isPost)
    {
      return GetHtml(url, postData, isPost, cc);
    }
    #endregion
  }
}

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved