|
|
茫茫網海中的冷日
發生過的事,不可能遺忘,只是想不起來而已! |
|
恭喜您是本站第 1729334
位訪客!
登入 | 註冊
|
|
|
|
發表者 |
討論內容 |
冷日 (冷日) |
發表時間:2010/6/2 2:02 |
- 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#学习笔记 - 博客园
|
|
冷日 (冷日) |
發表時間:2010/6/2 2:08 |
- Webmaster

- 註冊日: 2008/2/19
- 來自:
- 發表數: 15771
|
- [轉貼][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]+?>)
抓出來的結果會像這樣子  嘖,結果還是沒有解決YAHOO大量存取的Error 999 的問題 MyBlog_笑著流淚II » Blog Archive » [c#]擷取網頁原始碼Version 1.1
|
|
冷日 (冷日) |
發表時間:2010/6/2 2:17 |
- 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
|
|
|
|