2012-09-28 73 views
1

我需要使用HTTPWebRequest登錄到外部網站並將我重定向到默認頁面。我的代碼在一個按鈕的後面 - 點擊它時,它目前嘗試做一些處理,但保持在同一頁面上。我需要它將我重定向到外部網站的默認頁面,而無需看到登錄頁面。任何幫助我做錯了什麼?HTTPWebRequest登錄POST不重定向

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 

僅供參考 - 當我在這段代碼在末尾添加,我得到我想要重定向到

Dim responseReader1 As StreamReader 
responseReader1 = New StreamReader(getRequest.GetResponse().GetResponseStream()) 

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

任何幫助的默認頁面的HTML上什麼失蹤得到重定向加工?

乾杯

回答

0

的HttpWebRequest的,如果服務器在響應中的位置字段發送一個HTTP重定向的3xx狀態只有自動重定向你。否則,例如,您應該使用Response.Redirect手動導航到頁面。另請注意,由服務器發送的自動重定向IGNORES ANY COOKIES。如果服務器實際發送重定向狀態,那麼這可能是您的問題。