日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > php >内容正文

php

vb登录php代码,VB自动登陆网络站点详解

發(fā)布時間:2024/3/26 php 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 vb登录php代码,VB自动登陆网络站点详解 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

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)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。