2013-07-25 78 views
0

IM目前正試圖登錄到我的網站,這個工程然而,當它在記錄它不會重定向。這裏是我的代碼vb.net後登錄數據HttpWebRequest和餅乾

 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重定向?如果有的話,任何幫助傢伙?

+0

定義「它不會重定向」。什麼不會?你在哪裏執行或處理重定向? – David

+0

對不起,如果我通過瀏覽器登錄它將重定向到「/account.php」,但是當我通過應用程序登錄它登錄,但它保持在login.php並不會重定向到accounts.php – user1757913

+1

請檢查http:///stackoverflow.com/questions/8260736/webrequest-follow-redirect –

回答

0

看看你與來自服務器的響應做什麼:

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

所有你正在做的是讀它,並把響應到文本框的內容。你實際上沒有以任何方式迴應重定向。

「重定向」表示服務器在響應中迴應了特定的status codeheader。狀態碼告訴瀏覽器該響應是重定向到另一個資源的指令。標題包含瀏覽器應請求的新資源。

Web瀏覽器檢查此代碼/頭的響應並執行新的請求。你的代碼沒有。它只是向用戶顯示響應,無論它是什麼。

所以,爲了說明,正常的重定向發生這樣的事情:

  • 瀏覽器:我正在請求該資源。
  • 服務器:好的,我已收到您的請求,但您真正想要的資源實際上在那裏。
  • 瀏覽器:好的,那麼我現在正在請求那裏的資源。
  • 服務器:好的,在這裏你去。

您的代碼,但是,更多的是這樣的:

  • 代碼:我正在請求該資源。
  • 服務器:好的,我已收到您的請求,但您真正想要的資源實際上在那裏。
  • 代碼:[不採取進一步的行動]

服務器指示你的代碼,在HTTP規範的方式,申請一個新的資源。你的代碼簡單地忽略了該指令。

您需要檢查the status code of the response以及the headers of the response,並相應地提出新請求。

+0

感謝您的時間大衛,我會讀它並再試一次:) – user1757913