我在将数据发布到网页上时遇到了障碍:( 以下是我从很多地方改编的代码(最近这里:http://p2p.wrox.com/asp-net-1-0-1-1-professional/34517-webrequest-webresponse-form-submit-problem-help.html)
Dim url As String = "https://student.ashford.edu/student/"
Dim data As String = "username=myusername&password=mypassword"
Dim buffer As Byte() = Encoding.UTF8.GetBytes(data)
Dim result As String = ""
Dim req As HttpWebRequest = DirectCast(WebRequest.Create(url), HttpWebRequest)
req.Method = "POST"
req.ContentType = "application/x-www-form-urlencoded"
req.ContentLength = buffer.Length
req.CookieContainer = New CookieContainer()
' enable cookies
Dim reqst As Stream = req.GetRequestStream()
' add form data to request stream
reqst.Write(buffer, 0, buffer.Length)
reqst.Flush()
reqst.Close()
Console.WriteLine(vbLf & "Posting data to " & url)
Dim res As HttpWebResponse = DirectCast(req.GetResponse(), HttpWebResponse)
' send request,get response
Console.WriteLine(vbLf & "Response stream is: " & vbLf)
Dim resst As Stream = res.GetResponseStream()
' display HTTP response
Dim sr2 As New StreamReader(resst)
result = sr2.ReadToEnd()
Using writer As System.IO.StreamWriter = New StreamWriter("C:\Temp\checkcheck.html")
writer.Write(result)
End Using
当我检查checkcheck.html文件时,它没有显示我成功登录大学时通常看到的页面,而是再次显示登录页面,提示输入用户名和密码。由于它提示输出响应中的用户/传递,这是否表示没有发布任何内容?或者登录按钮没有被击中?
对于源中的字段名称,用户名字段的名称为“username”,密码字段的名称为“password”。据我所知,登录按钮本身的名称是“提交”。下面是页面的来源,我错过了什么吗?
view-source:https://student.ashford.edu/student/
https://student.ashford.edu/student/
我想要发生的是,在我的VB.NET后端,我点击一个按钮,我的用户名和密码自动输入,我自动登录。登录完成后,我想检索HTML的登录页面,以便我可以解析与我的学习相关的项目。这可能是无关的,但如果我导航到其他页面,是否需要使用cookie来保持我的应用程序“登录”?
编辑: 我尝试插入不同的URL,但无济于事。我还尝试将POST = login和login = submit(当然也可以)添加到POST数据中。我仍然从最后的结果变量中获取原始登录屏幕HTML,而不是我通常手动登录后我期待的大学主页。也许有一个我失踪的后续步骤?
答案 0 :(得分:0)
实际的表单操作位于https://student.ashford.edu/login/commands/login.php
。您可以将其插入url
。另外,请尝试在值中包含提交按钮 - submit=login
- 。
答案 1 :(得分:0)
我发现了我需要做的事情。首先,我必须确保我有一个cookie容器。接下来,我使用Fiddler来确切地找到我的浏览器和我想要登录的地方之间来回发送的内容。我发布了所有的登录信息,然后我得到了回复。这似乎用我所需的身份验证cookie填满了我的cookie容器变量?接下来,我向我要去的页面发出另一个POST请求,瞧 - 它有效。