0

我目前正在尝试登录我的网站,这可行,但是登录时不会重定向。这是我的代码

        Dim request As WebRequest = WebRequest.Create("http://www.jamiehayles.com/test/login.php")
        request.Method = "POST"

        Dim postData As String = "username=testing&password=lmao1234"
        Dim byteArray As Byte() = Encoding.UTF8.GetBytes(postData)
        request.ContentType = "application/x-www-form-urlencoded"
        request.ContentLength = byteArray.Length

        Dim dataStream As Stream = request.GetRequestStream()
        dataStream.Write(byteArray, 0, byteArray.Length)
        dataStream.Close()
        Dim response As WebResponse = request.GetResponse()
        Console.WriteLine(CType(response, HttpWebResponse).StatusDescription)
        dataStream = response.GetResponseStream()
        Dim reader As New StreamReader(dataStream)
        Dim responseFromServer As String = reader.ReadToEnd()
        RichTextBox1.Text = responseFromServer
       reader.Close()
        dataStream.Close()
        response.Close()

我的问题是,我需要 cookie 来重定向吗?如果有的话,有什么帮助吗?

4

1 回答 1

0

看看你对来自服务器的响应做了什么:

Dim responseFromServer As String = reader.ReadToEnd()
RichTextBox1.Text = responseFromServer

您所做的就是阅读它并将响应的内容放入文本框中。您实际上并没有以任何方式响应重定向。

“重定向”意味着服务器在响应中使用特定的状态代码标头进行响应。状态码告诉浏览器响应是重定向到另一个资源的指令。标头包含浏览器应请求的新资源。

Web 浏览器检查此代码/标头的响应并执行新请求。你的代码没有。它只是向用户显示响应,不管它是什么。

因此,为了说明,正常的重定向是这样发生的:

  • 浏览器:我正在请求此资源。
  • 服务员:好的,你的请求我已经收到了,但是你真正想要的资源其实就在那边。
  • 浏览器:好的,那我现在在那边请求那个资源。
  • 服务员:好的,给你。

但是,您的代码更像这样:

  • 代码:我正在请求此资源。
  • 服务员:好的,你的请求我已经收到了,但是你真正想要的资源其实就在那边。
  • 代码:[不采取进一步行动]

服务器以 HTTP 标准的方式指示您的代码请求新资源。您的代码只是忽略了该指令。

您需要检查响应的状态码以及响应标头,并相应地发出新请求。

于 2013-07-25T14:47:36.563 回答