HTTP Web Request适用于其他站点,但不适用于此站点。有任何想法吗? (VB.NET)

时间:2012-06-03 05:23:46

标签: vb.net cookies httpwebrequest postdata

我正在用VB.NET编写一个程序,我的httpwebrequest代码遇到了问题。我已经使用firefox的实时HTTP头来获取正确的帖子数据,但由于某种原因它不会登录。

问题是,我在另一个类似的网站上使用了相同的代码(只更改帖子数据),它的工作正常。

有什么想法?这是我的代码......

Imports System.Windows.Forms
Imports System.Net
Imports System.IO
Imports System.Text
Imports System.Text.RegularExpressions
Imports System.ComponentModel
Imports System.Threading

Public Class Form1
        Dim logincookie As CookieContainer
        Dim html As String = "BGW still running"

        Private Sub cmdStart_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdStart.Click

            Dim username As String = "username"
            Dim password As String = "password"

            Dim postData As String = "url=&username=" + username + "&password=" + password + "&login=Check+Mail%21"
            Dim tempcookies As New CookieContainer
            Dim encoding As New UTF8Encoding
            Dim bytedata As Byte() = encoding.GetBytes(postData)

            Dim postReq As HttpWebRequest = DirectCast(WebRequest.Create("http://www.website.com/inbox.aspx?login"), HttpWebRequest)
            postReq.Method = "POST"
            postReq.KeepAlive = True
            postReq.CookieContainer = tempcookies
            postReq.ContentType = "application/x-ww-form-urlencoded"
            postReq.Referer = "http://www.website.com/inbox.aspx?login"
            postReq.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:11.0) Gecko/20100101 Firefox/11.0"
            postReq.ContentLength = bytedata.Length

            Dim postReqStream As Stream = postReq.GetRequestStream()
            postReqStream.Write(bytedata, 0, bytedata.Length)
            postReqStream.Close()
            Dim postResponse As HttpWebResponse

            postResponse = DirectCast(postReq.GetResponse(), HttpWebResponse)
            tempcookies.Add(postResponse.Cookies)
            logincookie = tempcookies

            Dim matchCount As Integer = 0

        Dim request As System.Net.HttpWebRequest = System.Net.HttpWebRequest.Create("http://www.website.com/editprofile.aspx")
            request.CookieContainer = logincookie
            Dim response As System.Net.HttpWebResponse = request.GetResponse
            Dim reader As System.IO.StreamReader = New System.IO.StreamReader(response.GetResponseStream())


            html = reader.ReadToEnd
    End Sub

End Class

感谢任何想法或建议。

2 个答案:

答案 0 :(得分:1)

登录与您显示的网址不同。重定向到与您的代码中的网址不同的网址。

答案 1 :(得分:1)

很抱歉以后回复,但这也会帮助其他人..

因为你错过了一个CookieContainer,这对使用HTTP WEBREQUEST的登录非常重要......

这是一本令人惊叹的教程!我使用相同的方法登录MYBB FORUMS,vBULLETIN和许多其他JOOMLA,WORDPRESS网站..并且一遍又一遍地使用相同教程中的相同代码..

以下是代码:

Imports System.Net
Imports System.Text
Imports System.IO

Public Class Form1

Dim logincookie As CookieContainer

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

Dim postData As String = "referer=http%3A%2F%2Fforums.zybez.net%2Findex.php%3Fapp%3Dcore%26module%3Dglobal%26section%3Dlogin&username=" & TextBox1.Text & "&password=" & TextBox2.Text & "&rememberMe=1"
Dim tempCookies As New CookieContainer
Dim encoding As New UTF8Encoding
Dim byteData As Byte() = encoding.GetBytes(postData)

Dim postReq As HttpWebRequest = DirectCast(WebRequest.Create("http://forums.zybez.net/index.php?app=core&module=global&section=login&do=process"), HttpWebRequest)
postReq.Method = "POST"
postReq.KeepAlive = True
postReq.CookieContainer = tempCookies
postReq.ContentType = "application/x-www-form-urlencoded"
postReq.Referer = "http://forums.zybez.net/index.php?app=core&module=global&section=login&do=process"
postReq.UserAgent = "Mozilla/5.0 (Windows; U; Windows NT 6.1; ru; rv:1.9.2.3) Gecko/20100401 Firefox/4.0 (.NET CLR 3.5.30729)"
postReq.ContentLength = byteData.Length

Dim postreqstream As Stream = postReq.GetRequestStream()
postreqstream.Write(byteData, 0, byteData.Length)
postreqstream.Close()
Dim postresponse As HttpWebResponse

postresponse = DirectCast(postReq.GetResponse(), HttpWebResponse)
tempCookies.Add(postresponse.Cookies)
logincookie = tempCookies
Dim postreqreader As New StreamReader(postresponse.GetResponseStream())

End Sub

End Class

致“HowToStartProgramming.Com”的信用