C#三種模擬自動登入和提交POST資訊的實現方法
C#三種模擬自動登入和提交POST資訊的實現方法
自動登入(提交Post內容)的用途很多,如驗證身份、程式升級、網路投票等,以下是用C#實現的方法。
網頁自動登入和提交POST資訊的核心就是分析網頁的原始碼(HTML),在C#中,可以用來提取HTML的元件比較多,常用的用WebBrowser、WebClient、HttpWebRequest這三個。以下就分別用這三種方法來實現:
1、WebBrowser是個"迷你"瀏覽器,其特點是Post時不用關心Cookie、內建JS等問題
WebBrowser是VS2005新提供的元件(其實就是封裝了IE介面),實現POST功能一般在webBrowser的DocumentCompleted中分析HtmlDocument 來實現,程式碼如下:
HtmlElement ClickBtn =null;
if (e.Url.ToString().ToLower().IndexOf("xxx.htm") > 0) //登陸頁面
{
HtmlDocument doc = webBrowser1.Document;
for (int i = 0; i < doc.All.Count ; i++)
{
if (doc.All[i].TagName.ToUpper().Equals("INPUT"))
{
switch (doc.All[i].Name)
{
case "userCtl":
doc.All[i].InnerText = "user01";
break;
case "passCt1":
doc.All[i].InnerText = "mypass";
break;
case "B1":
ClickBtn = doc.All[i]; //提交按鈕
break;
}
}
}
ClickBtn.InvokeMember("Click"); //執行按扭操作
}
2、WebClient封裝了HTTP的一些類,操作簡單,相較於webBrowser,特點是可以自設代理,缺點是對COOKIE的控制
WebClient的執行全在後臺,並且提供了非同步操作的能力,這樣很方便併發多個任務,然後等待結果的返回,再逐個處理。多工非同步呼叫的程式碼如下:
private void StartLoop(int ProxyNum)
{
WebClient [] wcArray = new WebClient[ProxyNum]; //初始化
for (int idArray = 0; idArray< ProxyNum;idArray++)
{
wcArray[idArray] = new WebClient();
wcArray[idArray].OpenReadCompleted += new OpenReadCompletedEventHandler(Pic_OpenReadCompleted2);
wcArray[idArray].UploadDataCompleted += new UploadDataCompletedEventHandler(Pic_UploadDataCompleted2);
try
{
......
wcArray[idArray].Proxy = new WebProxy(proxy[1], port);
wcArray[idArray].OpenReadAsync(new Uri(")); //開啟WEB;
proxy = null;
}
catch
{
}
}
}
private void Pic_OpenReadCompleted2(object sender, OpenReadCompletedEventArgs e)
{
if (e.Error == null)
{
string textData = new StreamReader(e.Result, Encoding.Default).ReadToEnd(); //取返回資訊
.....
String cookie = ((WebClient)sender).ResponseHeaders["Set-Cookie"];
((WebClient)sender).Headers.Add("Content-Type", "application/x-www-form-urlencoded");
((WebClient)sender).Headers.Add("Accept-Language", "zh-cn");
((WebClient)sender).Headers.Add("Cookie", cookie);
string postData = "......"
byte[] byteArray = Encoding.UTF8.GetBytes(postData); // 轉化成二進位制陣列
((WebClient)sender).UploadDataAsync(new Uri("), "POST", byteArray);
}
}
private void Pic_UploadDataCompleted2(object sender, UploadDataCompletedEventArgs e)
{
if (e.Error == null)
{
string returnMessage = Encoding.Default.GetString(e.Result);
......
}
}
3、HttpWebRequest較為低層,能實現的功能較多,Cookie操作也很簡單
private bool PostWebRequest()
{
CookieContainer cc = new CookieContainer();
string pos tData = "user=" + strUser + "&pass=" + strPsd;
byte[] byteArray = Encoding.UTF8.GetBytes(postData); // 轉化
HttpWebRequest webRequest2 = (HttpWebRequest)WebRequest.Create(new Uri("));
webRequest2.CookieContainer = cc;
webRequest2.Method = "POST";
webRequest2.ContentType = "application/x-www-form-urlencoded";
webRequest2.ContentLength = byteArray.Length;
Stream newStream = webRequest2.GetRequestStream();
// Send the data.
newStream.Write(byteArray, 0, byteArray.Length); //寫入引數
newStream.Close();
HttpWebResponse response2 = (HttpWebResponse)webRequest2.GetResponse();
StreamReader sr2=new StreamReader(response2.GetResponseStream(), Encoding.Default);
string text2 = sr2.ReadToEnd();
......
}
HttpWebRequest同樣提供了非同步操作,有興趣的朋友自己查MSDN,實現起來也不難
[@more@]
網頁自動登入和提交POST資訊的核心就是分析網頁的原始碼(HTML),在C#中,可以用來提取HTML的元件比較多,常用的用WebBrowser、WebClient、HttpWebRequest這三個。以下就分別用這三種方法來實現:
1、WebBrowser是個"迷你"瀏覽器,其特點是Post時不用關心Cookie、內建JS等問題
WebBrowser是VS2005新提供的元件(其實就是封裝了IE介面),實現POST功能一般在webBrowser的DocumentCompleted中分析HtmlDocument 來實現,程式碼如下:
HtmlElement ClickBtn =null;
if (e.Url.ToString().ToLower().IndexOf("xxx.htm") > 0) //登陸頁面
{
HtmlDocument doc = webBrowser1.Document;
for (int i = 0; i < doc.All.Count ; i++)
{
if (doc.All[i].TagName.ToUpper().Equals("INPUT"))
{
switch (doc.All[i].Name)
{
case "userCtl":
doc.All[i].InnerText = "user01";
break;
case "passCt1":
doc.All[i].InnerText = "mypass";
break;
case "B1":
ClickBtn = doc.All[i]; //提交按鈕
break;
}
}
}
ClickBtn.InvokeMember("Click"); //執行按扭操作
}
2、WebClient封裝了HTTP的一些類,操作簡單,相較於webBrowser,特點是可以自設代理,缺點是對COOKIE的控制
WebClient的執行全在後臺,並且提供了非同步操作的能力,這樣很方便併發多個任務,然後等待結果的返回,再逐個處理。多工非同步呼叫的程式碼如下:
private void StartLoop(int ProxyNum)
{
WebClient [] wcArray = new WebClient[ProxyNum]; //初始化
for (int idArray = 0; idArray< ProxyNum;idArray++)
{
wcArray[idArray] = new WebClient();
wcArray[idArray].OpenReadCompleted += new OpenReadCompletedEventHandler(Pic_OpenReadCompleted2);
wcArray[idArray].UploadDataCompleted += new UploadDataCompletedEventHandler(Pic_UploadDataCompleted2);
try
{
......
wcArray[idArray].Proxy = new WebProxy(proxy[1], port);
wcArray[idArray].OpenReadAsync(new Uri(")); //開啟WEB;
proxy = null;
}
catch
{
}
}
}
private void Pic_OpenReadCompleted2(object sender, OpenReadCompletedEventArgs e)
{
if (e.Error == null)
{
string textData = new StreamReader(e.Result, Encoding.Default).ReadToEnd(); //取返回資訊
.....
String cookie = ((WebClient)sender).ResponseHeaders["Set-Cookie"];
((WebClient)sender).Headers.Add("Content-Type", "application/x-www-form-urlencoded");
((WebClient)sender).Headers.Add("Accept-Language", "zh-cn");
((WebClient)sender).Headers.Add("Cookie", cookie);
string postData = "......"
byte[] byteArray = Encoding.UTF8.GetBytes(postData); // 轉化成二進位制陣列
((WebClient)sender).UploadDataAsync(new Uri("), "POST", byteArray);
}
}
private void Pic_UploadDataCompleted2(object sender, UploadDataCompletedEventArgs e)
{
if (e.Error == null)
{
string returnMessage = Encoding.Default.GetString(e.Result);
......
}
}
3、HttpWebRequest較為低層,能實現的功能較多,Cookie操作也很簡單
private bool PostWebRequest()
{
CookieContainer cc = new CookieContainer();
string pos tData = "user=" + strUser + "&pass=" + strPsd;
byte[] byteArray = Encoding.UTF8.GetBytes(postData); // 轉化
HttpWebRequest webRequest2 = (HttpWebRequest)WebRequest.Create(new Uri("));
webRequest2.CookieContainer = cc;
webRequest2.Method = "POST";
webRequest2.ContentType = "application/x-www-form-urlencoded";
webRequest2.ContentLength = byteArray.Length;
Stream newStream = webRequest2.GetRequestStream();
// Send the data.
newStream.Write(byteArray, 0, byteArray.Length); //寫入引數
newStream.Close();
HttpWebResponse response2 = (HttpWebResponse)webRequest2.GetResponse();
StreamReader sr2=new StreamReader(response2.GetResponseStream(), Encoding.Default);
string text2 = sr2.ReadToEnd();
......
}
HttpWebRequest同樣提供了非同步操作,有興趣的朋友自己查MSDN,實現起來也不難
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/16396910/viewspace-1032150/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- php 模擬POST提交的2種方法PHP
- C# Post 模擬表單提交C#
- 三種 Post 提交資料方式
- 【Java】——模擬登入實現Java
- Python培訓分享:python如何用cookie實現自動模擬登入?PythonCookie
- 使用postman模擬登陸post請求方法Postman
- POST 請求的三種常見資料提交格式
- QQ模擬登入實現後篇
- 實戰模擬│單點登入 SSO 的實現
- 單點登入的三種實現方式
- C#模擬HTTP請求Post JSONC#HTTPJSON
- 實戰:Mailivery 模擬登入AI
- C#程式實現軟體開機自動啟動的兩種常用方法C#
- Python自動登入QQ的實現示例Python
- 爬蟲實戰(二):Selenium 模擬登入並爬取資訊爬蟲
- Python+Selenium+phantomjs實現網頁模擬登入和截圖PythonJS網頁
- 整理post提交資料的四種解析方式
- 搜狗站長工具【post請求模擬登入】程式碼分享總結【批量提交搜狗收錄網址】
- Selenium使用Cookie實現自動登入Cookie
- vue實現登入和個人資訊元件展示Vue元件
- 破解「登入後複製」的三種方法
- Spring Boot(三):RestTemplate提交表單資料的三種方法Spring BootREST
- Python 爬蟲模擬登入方法彙總Python爬蟲
- Curl模擬提交資料
- selenium與python自動化測試模擬登入百度Python
- 實戰模擬│JWT 登入認證JWT
- 使用 mock 模擬登入介面資料Mock
- 介面自動化測試框架--http請求的get、post方法的實現框架HTTP
- 實現登入態的幾種方式
- 自動化驗證碼登入如何實現?
- 一種移動端模擬實現返回攔截的方案
- JavaScript模擬實現replaceAll方法JavaScript
- Python-模擬登入Python
- selenium模擬登入12306
- Flutter入門篇(三)— 如何實現登入動畫效果Flutter動畫
- [轉載]HTTP四種常見的POST提交資料方式HTTP
- 工業自動化控制系統中的PLC模擬量訊號資料採集如何實現?
- win10如何設定自動登入 win10設定自動登入的方法Win10
- SharedPreferences實現記住密碼----自動登入功能密碼