按鍵 使用WinHttp實現POST方式使用者模擬登入網站
阿新 • • 發佈:2019-01-08
引言
這篇文章是我以前在一個論壇裡寫的,今天把這篇文章轉移到這裡。
文章主要介紹瞭如何模擬一個網站的登入。
這裡使用的輔助工具是按鍵精靈,程式語言類似於VB。
實現步驟
第一步,獲取登入地址
開啟登入介面:
開啟除錯工具,點選登入按鈕,檢視資料資訊:
從除錯工具中可以看到實際登入地址和需要提交的引數。
第二步,獲取驗證碼地址
第三步,在瀏覽器中正常登入,檢視登入成功和失敗後返回的資訊(方便後邊進行判斷是否登入成功)
登入失敗顯示資訊:
登入成功顯示:
第四步,開始製作
首先設計介面:
程式碼實現:
'名稱:使用WinHttp實現POST方式使用者模擬登入網站
'按鍵ID:383810086wa
'E-mail:[email protected]
'時間:2015.6.13
'-------------------------------------------
'======相關資料資訊=======================================================
url_login = "http://xxx.com/login.php?action=login" '網站後臺登入地址 |
url_verify = "http://xxx.com/yzm.php" '網站驗證碼地址 |
' |
form_user = "xxxxxxxxxxx" '網站使用者名稱 |
form_passwd = "xxxxxxxxx" '網站使用者密碼 |
'========================================================================
'獲取網站cookie
Form1.InputBox_debug.Text = "正在獲取Cookie..." & vbCrlf '用於在介面上顯示執行資訊
Dim cookie
Set ObjWinHttp = CreateObject("WinHttp.WinHttpRequest.5.1")
With ObjWinHttp
.SetTimeouts 0,0,0,0
.Open "GET", url_login, False
.SetRequestHeader "Content-Type","application/x-www-form-urlencoded"
.Send
cookie = .getResponseHeader("Set-Cookie")
End With
Form1.InputBox_cookie.Text = cookie '將cookie寫入介面中的InputBox_cookie輸入框,方便檢視和讀取
Form1.InputBox_debug.Text = Form1.InputBox_debug.Text & "獲取cookie完成" & vbCrlf
'獲取網站驗證碼
Form1.InputBox_debug.Text = Form1.InputBox_debug.Text & "正在獲取驗證碼..." & vbCrlf
Dim verify_bit '定義驗證碼位元組集
With ObjWinHttp
.SetTimeouts 0,0,0,0
.Open "GET", url_verify, False
.SetRequestHeader "Content-Type","application/x-www-form-urlencoded"
.SetRequestHeader "Cookie", cookie '提交cookie
.Send
verify_bit = .ResponseBody
End With
Set ObjStream = CreateObject("Adodb.Stream")
With ObjStream
.Type = 1
.Mode = 3
.Open
.Write verify_bit '寫入驗證碼位元組集
.SaveToFile ".\verify.jpg",2 '將驗證碼儲存為本地圖片
.Close
End With
Form1.InputBox_debug.Text = Form1.InputBox_debug.Text & "獲取驗證碼成功" & vbCrlf
'手動驗證驗證碼
Form1.PictureBox_Verify.Picture = ".\verify.jpg" '在介面中顯示驗證碼
Form1.Button_Verify.Visible = True '顯示“確認驗證碼”按鈕
Form1.InputBox_debug.Text = Form1.InputBox_debug.Text & "請輸入驗證碼" & vbCrlf
MessageBox "請輸入驗證碼"
Dimenv IsVerifyDone '定義是否已填入驗證碼
Dim checknum '定義接收驗證碼變數
IsVerifyDone = False '預設 沒有輸入驗證碼
Do '用於檢測是否輸入完成驗證碼
If IsVerifyDone Then
Form1.InputBox_debug.Text = Form1.InputBox_debug.Text & "驗證碼已輸入" & vbCrlf
checknum = Form1.InputBox_Verify.Text
Exit Do
End If
Delay 100
Loop
'進行網站使用者登入
Form1.InputBox_debug.Text = Form1.InputBox_debug.Text & "進行登入..." & vbCrlf
Dim login_data '定義使用者登入資料
Dim html_bit '定義登入頁面返回位元組集
login_data = "username=" & form_user & "&password=" & form_passwd & "&checknum=" & checknum
With ObjWinHttp
.SetTimeouts 0,0,0,0
.Open "POST", url_login, False
.SetRequestHeader "Content-Type","application/x-www-form-urlencoded"
.SetRequestHeader "Cookie", cookie '提交cookie
.SetRequestHeader "Content-Length", Len(login_data) '提交資料長度
.Send login_data '資料提交
html_bit = .ResponseBody
End With
With ObjStream
.Type = 1
.Mode = 3
.Open
.Write html_bit
.Position = 0
.Type = 2
.Charset = "UTF-8"
.Close
End With
Set ObjWinHttp = Nothing
Set ObjStream = Nothing
If Instr(1, ObjStream.ReadText, "成功", 1) > 0 Then '驗證登入後,網站頁面返回的資料,檢視是否登入成功
Form1.InputBox_debug.Text = Form1.InputBox_debug.Text & "登入成功!" & vbCrlf
MessageBox "登入成功!"
Else
Form1.InputBox_debug.Text = Form1.InputBox_debug.Text & "登入失敗!請檢測驗證碼、使用者名稱、密碼是否正確!" & vbCrlf
MessageBox "登入失敗!請檢測 使用者名稱、密碼、驗證碼 是否填寫正確!"
End If
除錯結果: