vb登录php代码,VB自动登陆网络站点详解
URL
帳號
密碼
其它參數(shù)
SOHU郵箱
http://login.sohu.com/chkpwd.php
UserName
Password
網(wǎng)易通行證
http://reg4.163.com/CheckUser.jsp
username
password
CSDN通行證
http://www.csdn.net/member/logon.asp
login_name
password
cookietime=0&
x=42&y=10
表格中的參數(shù)就是按照前面介紹的方法得到的,在程序中將要用到。
先說明一點, WebBrowser也是可以直接POST數(shù)據(jù)給Web服務(wù)器的,我將在第四部分給出代碼。這里先看看Inet與WebBrowser相互配合的效果。
新建一個工程,部件中勾選中“Microsoft Internet Transfer Controls 6.0”、“Microsoft Internet Controls”,依次添加Inet1、WebBrowser1、Text1、Text2、Combo1在窗體上,可以把WebBrowser1適當拉大一點,將各控件位置安排好(可以參考運行后的圖片),下面是代碼:
Dim URL1(2) As String:? Dim URL2(2) As String
Dim C1(2) As String: Dim C2(2) As String: Dim C3(2) As String
Private Sub Form_Load()
Text1.Text = ""
Text2.Text = ""
Text2.PasswordChar = "*"
Combo1.AddItem "SOHU郵箱", 0
Combo1.AddItem "網(wǎng)易通行證", 1
Combo1.AddItem "CSDN通行證", 2
Combo1.AddItem "請選擇一個登陸", 3
Combo1.Text = Combo1.List(3)
URL1(0) = "http://login.sohu.com/chkpwd.php": URL2(0) = "http://www34.mail.sohu.com/control/entry"
URL1(1) = "http://reg4.163.com/CheckUser.jsp": URL2(1) = "http://reg4.163.com/Main.jsp?"
URL1(2) = "http://www.csdn.net/member/logon.asp": URL2(2) = "http://www.csdn.net/Member/Passport.asp"
C1(0) = "UserName": C2(0) = "Password": C3(0) = ""
C1(1) = "username": C2(1) = "password": C3(1) = ""
C1(2) = "login_name": C2(2) = "password": C3(2) = "cookietime=0&x=42&y=10"
End Sub
Private Sub Form_Resize()
If Me.WindowState <> 1 Then
WebBrowser1.Left = 10
WebBrowser1.Width = Me.Width - 120
WebBrowser1.Height = Me.Height - 800
End If
End Sub
Private Sub Text2_KeyUp(KeyCode As Integer, Shift As Integer)
If KeyCode <> 13 Then Exit Sub
If Combo1.ListIndex = 3 Then MsgBox "請選擇一個登陸": Exit Sub
If Text1.Text = "" Then MsgBox "請輸入用戶名": Exit Sub
If Text2.Text = "" Then MsgBox "請輸入密碼": Exit Sub
Dim strFormData As String
strFormData = C1(Combo1.ListIndex) + "=" + Text1.Text + "&" + C2(Combo1.ListIndex) + "=" + Text2.Text + "&" + C3(Combo1.ListIndex)
Inet1.Execute URL1(Combo1.ListIndex), "Post", strFormData, "Content-Type: application/x-www-form-urlencoded "
Do Until Inet1.StillExecuting = False '這里阻塞前面的Inet1,確保登陸成功之后再取頁面,你可以將此Do取消了試一次。
DoEvents
Loop
If Combo1.ListIndex = 1 Then
WebBrowser1.Navigate URL2(Combo1.ListIndex) + C1(Combo1.ListIndex) + "=" + Text1.Text
Else
WebBrowser1.Navigate URL2(Combo1.ListIndex)
End If
End Sub
大家可以挑選一個自己已經(jīng)注冊過的站點看看效果。
點擊查看大圖
可以看到,登陸成功之后, Inet與WebBrowser是可以保持住同一個Session對話的!不過當我們在WebBrowser中顯示出來的頁面上點擊了一個連接之后,請求卻不能成功(請讀者自己試一下,在登陸成功的站點中任意點擊一個與用戶相關(guān)的連接,彈出來的將是一個“你沒有登陸”的頁面)。為什么?
因為我們現(xiàn)在點擊的連接還是使用IE(操作系統(tǒng)默認的瀏覽器)打開的,而IE請求頁面的時候使用的是服務(wù)器新發(fā)送過來的Session,這個新的Session與你在WebBrowser中使用的Session也就是身份ID不一樣,至少服務(wù)器是這么認為的,它以為是另一個沒有登陸的用戶。所以說Session的作用范圍不是對整個客戶機的,通過實際的代碼可以很好的理解這一點。(可以利用這一點,使用代碼在一臺電腦上實現(xiàn)兩個以上的用戶同時登陸,甚至還能對同一主題進行無縫發(fā)言。)
所以接下來我們要使頁面繼續(xù)停在WebBrowser中顯示。因為很顯然,既然WebBrowser與Inet是可以保持住同一個Session對話的,那么WebBrowser與WebBrowser內(nèi)部自然也是可以的!
要添加的代碼很簡單——
Private Sub WebBrowser1_NewWindow2(ppDisp As Object, Cancel As Boolean)
Dim frm2 As New Form2
frm2.WebBrowser1.RegisterAsBrowser = True
Set ppDisp = frm2.WebBrowser1.Object
frm2.Show
End Sub
然后在工程中添加一個Form2,上面再放一個WebBrowser1,調(diào)整好位置,Form2的代碼窗口添加上以下代碼:
Private Sub Form_Load()
WebBrowser1.Silent = True
End Sub
Private Sub Form_Resize()
If Me.WindowState <> 1 Then
WebBrowser1.Left = 10
WebBrowser1.Width = Me.Width - 120
WebBrowser1.Height = Me.Height - 600
End If
End Sub
Private Sub WebBrowser1_NewWindow2(ppDisp As Object, Cancel As Boolean)’這里為了避免在Form1中同樣發(fā)生的事情。
Dim frm2 As New Form2
frm2.WebBrowser1.RegisterAsBrowser = True
Set ppDisp = frm2.WebBrowser1.Object
frm2.Show
End Sub
利用Inet發(fā)送登陸請求,WebBrowser瀏覽實際頁面,的確是個很不錯的構(gòu)思,在登陸站點相對教少的情況下應(yīng)該是沒有什么問題的。但是這也會使事情變得更加復(fù)雜。除了不能缺少的POST地址(URL1)、帳號參數(shù)(C1)、密碼參數(shù)(C2)、其它參數(shù)(C3)之外,還必須要有供WebBrowser請求瀏覽的頁面地址參數(shù)(URL2)。 雖然只是多了一個參數(shù),但卻添加了很多麻煩(比如網(wǎng)易郵箱的請求頁面是根據(jù)用戶的帳號名自動生成的,不固定)。只有利用WebBrowser直接POST數(shù)據(jù)才能避免第四個參數(shù)。但是瀏覽器的界面以及功能卻是一個比較麻煩的問題(除非你不嫌麻煩,自己再動手寫一個)。
使用Internet Explorer對象可以使POST請求在IE中產(chǎn)生,從而脫離程序,遠離了美化界面的工作。程序甚至可以隱藏或退出,免去了WebBrowser帶來的煩惱,當然也不需要第四個參數(shù)。
下面我們還是以登陸CSDN為例,給出實際的代碼,您可以根據(jù)前面文章中提供的參數(shù)換成你注冊過的站點:
建新工程,在工程中“引用”Internet Explorer對象,點“瀏覽”,在系統(tǒng)文件夾下找到Shdocvw.dll(這個文件是IE自帶的),Form1中添加Command1,以下是代碼——
Dim g_oIE As InternetExplorer
Private Sub Command1_Click()
Dim vPost As Variant
Dim vHeaders As Variant
Set g_oIE = New InternetExplorer
g_oIE.Visible = True
ReDim aByte(0) As Byte
cPostData = "login_name=帳號&password=密碼&cookietime=0"
PackBytes aByte(), cPostData
vPost = aByte
vHeaders = "Content-Type: application/x-www-form-urlencoded" + Chr(10) + Chr(13)
g_oIE.Navigate "http://www.csdn.net/member/logon.asp", , , vPost, vHeaders
End Sub
Private Sub PackBytes(ByteArray() As Byte, ByVal PostData As String)
iNewBytes = Len(PostData) - 1
If iNewBytes < 0 Then Exit Sub
ReDim ByteArray(iNewBytes)
For i = 0 To iNewBytes
ch = Mid(PostData, i + 1, 1)
If ch = Space(1) Then
ch = "+"
End If
ByteArray(i) = Asc(ch)
Next
End Sub
(請輸入自己的帳號及密碼試運行。這種方法的好處是顯而易見的,你可以按這個方法將前面的代碼改造一下。)
PackBytes函數(shù)將Post出去的數(shù)據(jù)轉(zhuǎn)化為一個ASCII數(shù)組,另外vHeaders的值必須以“+ Chr(10) + Chr(13)”結(jié)束。
代碼沒有什么好解釋的,現(xiàn)在已經(jīng)進入到Shdocvw.dll這個“庫”中去了,而前面所說的WebBrowser及Internet Explorer都是這個庫中所包含的“類”。大家可以打開對象瀏覽器看看它們互相之間的關(guān)系。
本來這一部分內(nèi)容也應(yīng)該放在第二章,但一方面為了醒目,另一方面,這種方法實際上與Internet Explorer對象有很大的聯(lián)系及相似性,所以特意將之放在Internet Explorer對象之后介紹。
現(xiàn)在我們要用到的也是WebBrowser的“Navigate”方法,其函數(shù)原型如下所示:
Sub Navigate(URL As String, [Flags], [TargetFrameName], [PostData], [Headers])
大家不妨與第三章中Internet Explorer對象的“Navigate”方法比較一下,一模一樣,原來是同一個接口!!
新建一個工程,部件中勾選中 “Microsoft Internet Controls”,添加一個WebBrowser1、一個Command1在窗體上,可以把WebBrowser1適當拉大一點,Form1中添加以下代碼:
Private Sub Command1_Click()
ReDim aByte(0) As Byte ' Array of bytes to hold data to post
cPostData = "login_name=帳號&password=密碼&cookietime=0&x=42&y=10"
PackBytes aByte(), cPostData
Dim vPost As Variant
vPost = aByte ' Assign the byte array to a VARIANT
Dim vHeaders As Variant
vHeaders = "Content-Type: application/x-www-form-urlencoded" + Chr(10) + Chr(13)
WebBrowser1.Navigate "http://www.csdn.net/member/logon.asp", , , vPost, vHeaders
End Sub
Private Sub PackBytes(ByteArray() As Byte, ByVal PostData As String)
iNewBytes = Len(PostData) - 1?? ' Get rid of the null termination
If iNewBytes < 0 Then
Exit Sub
End If
ReDim ByteArray(iNewBytes)
For i = 0 To iNewBytes
ch = Mid(PostData, i + 1, 1)
If ch = Space(1) Then
ch = "+"
End If
Debug.Print ch, Asc(ch)
ByteArray(i) = Asc(ch)
Next
End Sub
(請參考第三章中的代碼。)
通過這四篇文章的介紹,我想讀者一定不光是對VB登陸Web服務(wù)器有了更深的認識,而且同時對HTTP協(xié)議、Cookie、Session也加深了理解!
全文完!!!
注:本系列文章,請勿用于商業(yè)用途,有轉(zhuǎn)載或發(fā)表行為的請務(wù)必事先與本人聯(lián)系wshk_18@163.com
總結(jié)
以上是生活随笔為你收集整理的vb登录php代码,VB自动登陆网络站点详解的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 涉密磁盘销毁
- 下一篇: 制作PHP动态网页软件,使用PHP制作动