使用 HttpWebRequest 向网站提交数据
                                                            生活随笔
收集整理的這篇文章主要介紹了
                                使用 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? 對?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?的情況下
轉載于:https://www.cnblogs.com/hacker84/archive/2008/03/04/1090610.html
總結
以上是生活随笔為你收集整理的使用 HttpWebRequest 向网站提交数据的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: 通过OleDB连接方式,访问Access
- 下一篇: NickLee.FortuneBase数
