我正在用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
感谢任何想法或建议。
答案 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§ion=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§ion=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”的信用