HTTPWebRequest登录POST不是重定向

时间:2012-09-28 06:44:14

标签: vb.net post httpwebrequest

我需要使用HTTPWebRequest登录外部网站并将我重定向到默认页面。我的代码位于按钮后面 - 当点击它时,它当前尝试进行一些处理但保持在同一页面上。我需要它将我重定向到外部网站的默认页面,而不会看到登录页面。对我做错的任何帮助?

    Dim loginURL As String = "https://www.example.com/login.aspx"

    Dim cookies As CookieContainer = New CookieContainer
    Dim myRequest As HttpWebRequest = CType(WebRequest.Create(loginURL), HttpWebRequest)
    myRequest.CookieContainer = cookies
    myRequest.AllowAutoRedirect = True
    myRequest.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:13.0) Gecko/20100101 Firefox/13.0.1"

    Dim myResponse As HttpWebResponse = CType(myRequest.GetResponse(), HttpWebResponse)

    Dim responseReader As StreamReader
    responseReader = New StreamReader(myResponse.GetResponseStream())
    Dim responseData As String = responseReader.ReadToEnd()
    responseReader.Close()

    'call a function to extract the viewstate needed to login
    Dim ViewState As String = ExtractViewState(responseData)

    Dim postData As String = String.Format("__VIEWSTATE={0}&txtUsername={1}&txtPassword={2}&btnLogin.x=27&btnLogin.y=9", ViewState, "username", "password")
    Dim encoding As UTF8Encoding = New UTF8Encoding()
    Dim data As Byte() = encoding.GetBytes(postData)

    'POST to login page
    Dim postRequest As HttpWebRequest = CType(WebRequest.Create(loginURL), HttpWebRequest)
    postRequest.Method = "POST"
    postRequest.AllowAutoRedirect = True
    postRequest.ContentLength = data.Length
    postRequest.CookieContainer = cookies
    postRequest.ContentType = "application/x-www-form-urlencoded"
    postRequest.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:13.0) Gecko/20100101 Firefox/13.0.1"

    Dim newStream = postRequest.GetRequestStream()
    newStream.Write(data, 0, data.Length)
    newStream.Close()

    Dim postResponse As HttpWebResponse = CType(postRequest.GetResponse(), HttpWebResponse)

   'using GET request on default page
    Dim getRequest As HttpWebRequest = CType(WebRequest.Create("https://www.example.com/default.aspx"), HttpWebRequest)
    getRequest.CookieContainer = cookies
    getRequest.AllowAutoRedirect = True

    Dim getResponse As HttpWebResponse = CType(getRequest.GetResponse(), HttpWebResponse)
    'returns statuscode = 200

仅供参考 - 当我在最后添加此代码时,我会获取我正在尝试重定向到

的默认页面的HTML
Dim responseReader1 As StreamReader
responseReader1 = New StreamReader(getRequest.GetResponse().GetResponseStream())

responseData = responseReader1.ReadToEnd()
responseReader1.Close()
Response.Write(responseData)

为了让重定向工作失败,有什么帮助?

干杯

1 个答案:

答案 0 :(得分:0)

如果服务器在响应中发送带有位置字段的HTTP 3xx重定向状态,则HttpWebRequest仅自动重定向您。否则,您应该使用Response.Redirect手动导航到该页面。还要记住服务器发送的自动重定向IGNORES ANY COOKIES。如果服务器实际上正在发送重定向状态,则可能是您的问题。

相关问题