HttpWebRequest Логин данные затем перенаправить - PullRequest
2 голосов
/ 11 октября 2011

Я пытаюсь использовать HttpwebRequest и Httpwebresponse для входа на веб-сайт через POST, а затем после проверки подлинности перенаправить его на страницу по умолчанию на новом сайте.Я могу сделать responsereader.ReadttoEnd () поставить не уверен, как получить автоматическое перенаправление.

     Dim ccContainer As New CookieContainer()
            Dim encoding As New ASCIIEncoding()
            Dim strId As String = "username"
            Dim strName As String = "password"

 Dim postData As String = "UAPMURL=&UAPMURLxx=xx&login=" & strId
        postData += ("&password1=" & strName)
        Dim data As Byte() = encoding.GetBytes(postData)

        ' Prepare web request...
        Dim myRequest As HttpWebRequest = DirectCast(WebRequest.Create("http://www.LOGINURLHERE.COM/LOGIN.PHP?"), HttpWebRequest)

        Dim cc As New CookieContainer


        ' <<--- This is the key word of the day
        myRequest.Method = "POST"
        myRequest.AllowAutoRedirect = False
        myRequest.ContentType = "application/x-www-form-urlencoded"
        myRequest.UserAgent = "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)"
        myRequest.KeepAlive = True
        myRequest.CookieContainer = New CookieContainer()

        myRequest.ContentLength = data.Length
        Dim newStream As Stream = myRequest.GetRequestStream()
        ' Send the data.
        newStream.Write(data, 0, data.Length)
        newStream.Close()

        Dim _response As HttpWebResponse = DirectCast(myRequest.GetResponse(), HttpWebResponse)
        If myRequest.HaveResponse Then
            For Each retCookie As Cookie In _response.Cookies
                cc.Add(retCookie)
            Next
        End If

        Dim request As HttpWebRequest = DirectCast(WebRequest.Create("http://www.DESTINATIONURL.COM/Main.php"), HttpWebRequest)
        request.CookieContainer = cc
        request.AllowAutoRedirect = False


        Dim _res As HttpWebResponse = DirectCast(request.GetResponse(), HttpWebResponse)

Если я сделаю это ...

Закомментироватьэта строка

 'Dim _res As HttpWebResponse = DirectCast(request.GetResponse(), HttpWebResponse)

Используйте эти ... она читает и заполняет мою текущую страницу данными из целевого URL.Я что-то упустил, чтобы получить автоматическое перенаправление?Спасибо

   Dim request As HttpWebRequest = DirectCast(WebRequest.Create("http://www.destinationurl.com"), HttpWebRequest)
    request.CookieContainer = cc
    request.AllowAutoRedirect = False

 Dim responseReader As New StreamReader(request.GetResponse().GetResponseStream())
    Dim responseData As String = responseReader.ReadToEnd()
    responseReader.Close()
    Response.Write(responseData)

1 Ответ

1 голос
/ 11 октября 2011

Вы не перенаправляете;Сервер перенаправляет.

  • Если сервер отправляет вам ответ о перенаправлении (код = 3xx), вы запрашиваете URL-адрес, на который он перенаправляет вас.
  • Если перенаправление обрабатывается прозрачно, _response.ResponseURI будет содержать адрес, на который он перенаправлен.Если нет, вам нужно прочитать заголовок перенаправления и решить самостоятельно, запрашивать ли новую страницу или нет.
  • Если сервер вообще не перенаправляет, вам просто нужно запросить любой URL, который вы хотите, когда у вас естьваш файл cookie аутентификации.
...