茫茫網海中的冷日
         
茫茫網海中的冷日
發生過的事,不可能遺忘,只是想不起來而已!
 恭喜您是本站第 1670521 位訪客!  登入  | 註冊
主選單

Google 自訂搜尋

Goole 廣告

隨機相片
IMG_227194.jpg

授權條款

使用者登入
使用者名稱:

密碼:


忘了密碼?

現在就註冊!

Dot Net? : [轉貼]使用 HttpWebRequest 向網站提交數據

發表者 討論內容
冷日
(冷日)
Webmaster
  • 註冊日: 2008/2/19
  • 來自:
  • 發表數: 15771
[轉貼]使用 HttpWebRequest 向網站提交數據
HttpWebRequest 是 .net 基類庫中的一個類,在命名空間 System.Net 下面,用來使用戶通過 HTTP 協議和服務器交互。

HttpWebRequest 對 HTTP 協議進行了完整的封裝,對 HTTP 協議中的 Header, Content, Cookie 都做了屬性和方法的支持,很容易就能編寫出一個模擬瀏覽器自動登錄的程序。

程序使用 HTTP 協議和服務器交互主要是進行數據的提交,通常數據的提交是通過 GET 和 POST 兩種方式來完成,下面對這兩種方式進行一下說明:

1. GET 方式。 GET 方式通過在網絡地址附加參數來完成數據的提交,比如在地址 http://www.google.com/webhp?hl=zh-CN 中,前面部分 http://www.google.com/webhp 表示數據提交的網址,後面部分 hl=zh-CN 表示附加的參數,其中 hl 表示一個鍵(key), zh-CN 表示這個鍵對應的值(value)。程序代碼如下:
HttpWebRequest req = (HttpWebRequest) HttpWebRequest.Create( "http://www.google.com/webhp?hl=zh-CN" );
req.Method = "GET";
using (WebResponse wr = req.GetResponse())
{
   //在這裡對接收到的頁面內容進行處理
}

2. POST 方式。 POST 方式通過在頁面內容中填寫參數的方法來完成數據的提交,參數的格式和 GET 方式一樣,是類似於 hl=zh-CN&newwindow=1 這樣的結構。程序代碼如下:
string param = "hl=zh-CN&newwindow=1";
byte[] bs = Encoding.ASCII.GetBytes(param);

HttpWebRequest req = (HttpWebRequest) HttpWebRequest.Create( "http://www.google.com/intl/zh-CN/" );
req.Method = "POST";
req.ContentType = "application/x-www-form-urlencoded";
req.ContentLength = bs.Length;

using (Stream reqStream = req.GetRequestStream())
{
   reqStream.Write(bs, 0, bs.Length);
}
using (WebResponse wr = req.GetResponse())
{
   //在這裡對接收到的頁面內容進行處理
}

在上面的代碼中,我們訪問了 www.google.com 的網址,分別以 GET 和 POST 方式提交了數據,並接收了返回的頁面內容。然而,如果提交的參數中含有中文,那麼這樣的處理是不夠的,需要對其進行編碼,讓對方網站能夠識別。

3. 使用 GET 方式提交中文數據。 GET 方式通過在網絡地址中附加參數來完成數據提交,對於中文的編碼,常用的有 gb2312 和 utf8 兩種,用 gb2312 方式編碼訪問的程序代碼如下:
Encoding myEncoding = Encoding.GetEncoding("gb2312");
string address =
       "http://www.baidu.com/s?" + HttpUtility.UrlEncode("參數一", myEncoding) +
       "=" + HttpUtility.UrlEncode("值一", myEncoding);
HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create(address);
req.Method = "GET";
using (WebResponse wr = req.GetResponse())
{
   //在這裡對接收到的頁面內容進行處理
}

在上面的程序代碼中,我們以 GET 方式訪問了網址 http://www.baidu.com/s ,傳遞了參數「參數一=值一」,由於無法告知對方提交數據的編碼類型,所以編碼方式要以對方的網站為標準。常見的網站中, www.baidu.com (百度)的編碼方式是 gb2312, www.google.com (谷歌)的編碼方式是 utf8。

4. 使用 POST 方式提交中文數據。 POST 方式通過在頁面內容中填寫參數的方法來完成數據的提交,由於提交的參數中可以說明使用的編碼方式,所以理論上能獲得更大的兼容性。用 gb2312 方式編碼訪問的程序代碼如下:
Encoding myEncoding = Encoding.GetEncoding("gb2312");
string param =
       HttpUtility.UrlEncode("參數一", myEncoding) + "=" + HttpUtility.UrlEncode("值一", myEncoding) +
       "&" + HttpUtility.UrlEncode("參數二", myEncoding) + "=" + HttpUtility.UrlEncode("值二", myEncoding);

byte[] postBytes = Encoding.ASCII.GetBytes(param);

HttpWebRequest req = (HttpWebRequest) HttpWebRequest.Create( "http://www.baidu.com/s" );
req.Method = "POST";
req.ContentType = "application/x-www-form-urlencoded;charset=gb2312";
req.ContentLength = postBytes.Length;

using (Stream reqStream = req.GetRequestStream())
{
   reqStream.Write(bs, 0, bs.Length);
}
using (WebResponse wr = req.GetResponse())
{
   //在這裡對接收到的頁面內容進行處理
}

從上面的代碼可以看出, POST 中文數據的時候,先使用 UrlEncode 方法將中文字符轉換為編碼後的 ASCII 碼,然後提交到服務器,提交的時候可以說明編碼的方式,用來使對方服務器能夠正確的解析。

以上列出了客戶端程序使用 HTTP 協議與服務器交互的情況,常用的是 GET 和 POST 方式。現在流行的 WebService 也是通過 HTTP 協議來交互的,使用的是 POST 方法。與以上稍有所不同的是, WebService 提交的數據內容和接收到的數據內容都是使用了 XML 方式編碼。所以, HttpWebRequest 也可以使用在調用 WebService 的情況下。

原文出處:使用 HttpWebRequest 向网站提交数据 - c#学习笔记 - 博客园
冷日
(冷日)
Webmaster
  • 註冊日: 2008/2/19
  • 來自:
  • 發表數: 15771
[轉貼][c#]擷取網頁原始碼Version 1.1

[c#]擷取網頁原始碼Version 1.1

Autor 白目研究生

記得之前有寫過了,還有印象乎??( 延伸閱讀)

不過貌似有編碼的問題

參考資料:  http://www.purecs.net/thread/topic493_1.aspx

找了第二個Solution

加了一些正規式語法過濾不必要的資料 or 只留需要的資料

HttpWebRequest request = (HttpWebRequest)WebRequest.Create(http://hostname/);
request.MaximumAutomaticRedirections = 4;
request.MaximumResponseHeadersLength = 4;
request.Credentials = CredentialCache.DefaultCredentials;
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
Stream receiveStream = response.GetResponseStream();
StreamReader readStream = new StreamReader(receiveStream, Encoding.UTF8);this.TextBox1.Text=readStream.ReadToEnd();
response.Close();
readStream.Close();

之後再加入Regex過濾資料

(?<=<a[\s\S]+?href=["'])http://[\s\S]+?(?=["'][\s\S]+?>) 

抓出來的結果會像這樣子

tssssssse.gif

嘖,結果還是沒有解決YAHOO大量存取的Error 999 的問題


MyBlog_笑著流淚II » Blog Archive » [c#]擷取網頁原始碼Version 1.1
冷日
(冷日)
Webmaster
  • 註冊日: 2008/2/19
  • 來自:
  • 發表數: 15771
[轉貼]淺析C# HTTP Request請求程序模擬
C# HTTP Request請求程序向你演示了在向服務器發送請求的模擬過程,那麼具體的使用到的方法是什麼呢?操作步驟是什麼呢?那麼本文就向你介紹詳細的內容。

C# HTTP Request請求程序模擬是如何實現的呢?我們在實現發送請求的操作是會用到哪些方法呢?那麼下面我們來看看具體的實現方法,使用下面的代碼片段時,記得 在程序的引用上右鍵,然後添加引用,添加 System.Web. 就可以使用下面的代碼了.

C# HTTP Request請求程序模擬實例
using System.Net;
using System.IO;
using System.Web;
/********************
 **C# HTTP Request請求程序模擬***
 * * 向服務器送出請求   * */
public string SendRequest(string param)  {
       ASCIIEncoding encoding = new ASCIIEncoding();
       byte[] data = encoding.GetBytes(param);
       HttpWebRequest request =   (HttpWebRequest)HttpWebRequest.Create(this.url);
       request.Method = "POST";
       request.ContentType = "application/x-www-form-urlencoded";
       request.ContentLength = data.Length;
       Stream sm = request.GetRequestStream();
       sm.Write(data, 0, data.Length);
       sm.Close();
       HttpWebResponse response =   (HttpWebResponse)request.GetResponse();
       if (response.StatusCode.ToString() != "OK")  {
          MessageBox.Show(response.StatusDescription.ToString());
          return "";
       }
       StreamReader myreader = new StreamReader(  response.GetResponseStream(), Encoding.UTF8);
       string responseText = myreader.ReadToEnd();
       return responseText;
}
/**C# HTTP Request請求程序模擬
 ** 進行UTF-8的URL編碼轉換(針對漢字參數)
 * * */
public string EncodeConver(string instring)  {
       return HttpUtility.UrlEncode(instring, Encoding.UTF8);
}
/**C# HTTP Request請求程序模擬
 ** 進行登錄操作並返回相應結果
 * * */
public bool DoLogin(string username,   string password)  {
       password = System.Web.Security.FormsAuthentication.  HashPasswordForStoringInConfigFile(password, "MD5");
       string param = string.Format("do=login&u={0}&p={1}",   this.EncodeConver(username), this.EncodeConver(password));
       string result = this.SendRequest(param);
       // MessageBox.Show(result); 解析 Result ,我這裡是作為一個XML Document來解析的
       return true;
}

C# HTTP Request請求程序模擬的基本內容就向你介紹到這裡,希望對你瞭解和學習C# HTTP Request請求程序模擬有所幫助。

【責任編輯:李彥光 TEL:(010)68476606】

原文出處:浅析C# HTTP Request请求程序模拟 - 51CTO.COM
前一個主題 | 下一個主題 | 頁首 | | |



Powered by XOOPS 2.0 © 2001-2008 The XOOPS Project|