其實(shí)我們只要在工程里加一個(gè)“WebBrowser”控件,就可以隨意讀取網(wǎng)頁(yè)上的任何東西,這樣就不再專門為不同的圖片碼寫一個(gè)顯示程序。在VB6上添加“WebBrowser”控件。
應(yīng)用此部件后在VB6的左邊控件欄里就會(huì)出現(xiàn)一個(gè)地球的按鈕。然后在窗體上繪出它的位置以及大小。(其實(shí)這個(gè)程序我早已寫好的,現(xiàn)在拿出來(lái)解釋),那個(gè)帶編輯點(diǎn)的控件就是“WebBrowser”。
載入此控件后也不用再編輯什么的,很方便,因?yàn)槠鋵?shí)上這個(gè)控件的行為都會(huì)在控鈕上觸發(fā)。在這先講講圖2里的相關(guān)控件關(guān)系,在圖2的最頂那個(gè)“CODE:….”那個(gè)文字輸入框就是在那里讀取圖片驗(yàn)證碼的URL,
http://verify.qq.com/getimage這個(gè)是Tencent里QQ申請(qǐng)密保圖片驗(yàn)證碼的URL。這個(gè)URL如何才能得到呢?這個(gè)獲取也很容易,在瀏覽器里右擊那個(gè)圖片驗(yàn)證碼屬性就可以看到它的URL。
下面那個(gè)“Post:”那個(gè)文字輸入框就是我們最后提交數(shù)據(jù)的目的頁(yè)面,這就簡(jiǎn)短的介紹這里。
接下來(lái)就是那個(gè)“WebBrowser”這個(gè)控件如何觸發(fā)它去讀取網(wǎng)頁(yè)。就這那個(gè)“刷新驗(yàn)證碼”的按鈕,里面的代碼這樣:“WebBrowser1.Navigate Trim(Text4.Text)”,這里的“Text4.Text”就是那個(gè)得到驗(yàn)證碼的URL。就是這個(gè)“WebBrowser”連接驗(yàn)證碼的URL的結(jié)果。
來(lái)到這,有一個(gè)問(wèn)題就是服務(wù)器發(fā)送出來(lái)的驗(yàn)證碼是與那個(gè)會(huì)話結(jié)合起來(lái)才有效的,否則服務(wù)器根本不知你是那個(gè)會(huì)話,至于那個(gè)會(huì)話其實(shí)就是那個(gè)Cookie,看下面。如圖5所示。它是我用WS找IE的Http報(bào)文的包,里面有比較多有用的信息。
這個(gè)會(huì)話的ID碼我們把數(shù)據(jù)Post回去時(shí)一定要把這個(gè)提交上去,要不然你返回了正確的圖片驗(yàn)證碼也沒(méi)有用。至于其中的會(huì)話ID如何在VB6里讀取自如呢?
在“WebBrowser”的控件里有一個(gè)類方法可以調(diào)用方法過(guò)程來(lái)得來(lái),且很方便。在窗體里那個(gè)“View”按鈕里加入以下兩行重要的代碼。
Dim doc As IHTMLDocument2 //通過(guò)定義Doc對(duì)像數(shù)據(jù)類型
Set Doc = WebBrowser1.Document //通過(guò)Set 來(lái)建立Doc對(duì)像。
如果要讀取“WebBrowser”已打開網(wǎng)頁(yè)的會(huì)話ID就可以通過(guò)以下的代碼就要以取得:
Msgbox “會(huì)話的ID為:”&doc.cookie,vbokonly,”讀取會(huì)話ID”來(lái)到這里我們已成功了一半了,緊接著的就是如何把得到的數(shù)據(jù)POST到目的頁(yè)面。Post數(shù)據(jù)有幾種方法,一般是用WinSock來(lái)建立TCP/IP的HTTP連接,這樣要重新的封包HTTP報(bào)文,比較好用但有些麻煩,不過(guò)它的靈活性也比較的好。但今天我沒(méi)有打算是用它來(lái)做數(shù)據(jù)Post,取而代之的就是用那個(gè)“MSXML2.XMLHTTP”,這個(gè)一般有裝過(guò)數(shù)據(jù)處理的軟件或Office軟件都會(huì)有存在,且它用起來(lái)真的比較方便,只要在VB里用“CreateObject”就可以了。
在封包Http報(bào)文時(shí)我們先看看IE是如何Post數(shù)據(jù)到目的頁(yè)面的,下面如圖6所示。就是我用WS找取IE瀏覽器Post數(shù)據(jù)的報(bào)文,可作參考用。
那個(gè)Cookie以及我Post出去的數(shù)據(jù)在這里可以看得一清二楚了,特別是那個(gè)Cookie的那些會(huì)話變量,它是與圖5里的那個(gè)Cookie會(huì)話一樣的,因?yàn)槲覜](méi)有關(guān)閉過(guò)IE瀏覽器。
理清了IE的工作過(guò)程后,下面就輪到我們自己來(lái)做了。下面的這一段代碼是比較完整,它是當(dāng)我觸發(fā)那個(gè)“View”按鈕里的代碼:
Private Sub Command2_Click()
Dim doc As IHTMLDocument2
Set doc = WebBrowser1.Document
Set objXMLHTTP = CreateObject("MSXML2.XMLHTTP")//建立XMLHTTP對(duì)像組件
//下面的這個(gè)“Trim(Text5.Text)”是讀取要Post的網(wǎng)頁(yè)
objXMLHTTP.open "POST", Trim(Text5.Text), False
//以下的一連幾個(gè)setRequestHeader都是設(shè)置HTTP的報(bào)文變量頭,有些是比較重要的。
objXMLHTTP.setRequestHeader "Referer", "
http://service.qq.com/psw/psw_id.htm"
objXMLHTTP.setRequestHeader "accept -language", "zh -cn"
objXMLHTTP.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
objXMLHTTP.setRequestHeader "cache -Control", "no - cache"
On Error Resume Next
//下面這行代碼是最重要的,它是把上一環(huán)節(jié)里取得的圖片驗(yàn)證碼的會(huì)話ID讀取并設(shè)置好準(zhǔn)備POST的HTTP報(bào)文頭。
objXMLHTTP.setRequestHeader "Cookie", doc.cookie
//下面這行代就是把我們要Post的數(shù)據(jù)重新封包好
q_post = "uin=" & Text1.Text & "&password=" & Text2.Text & "&code=" & Text3.Text & "step2=1&image.x=35&image.y=8"
objXMLHTTP.send (q_post)//當(dāng)一切搞好后,這里就是把我們之前細(xì)心封包的數(shù)據(jù)一次Post到目的頁(yè)面
If InStr(objXMLHTTP.responseText, "name=certtype") > 0 Then
MsgBox "此QQ沒(méi)有密保!", vbOKOnly + 64, "恭喜!!!"
Else
MsgBox "此QQ可能已有密保!", vbOKOnly + 16, Form1.Caption
End If
Set objXMLHTTP = Nothing
Text3.Text = ""
If Err Then
MsgBox "內(nèi)部出錯(cuò)!", vbOKOnly + 16, Form1.Caption
End If
End Sub
就這樣,一個(gè)讀取圖片驗(yàn)證碼的網(wǎng)絡(luò)程序已基本上完成了
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號(hào)聯(lián)系: 360901061
您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對(duì)您有幫助就好】元
