2010-12-01 66 views
0

我想用HttpWebRequest登錄到下面的網站。我使用憑證屬性傳遞用戶名和密碼,但不斷收回網站的登錄頁面。任何人都可以解釋我做錯了什麼。使用HttpWebRequest登錄到網頁

https://oyster.tfl.gov.uk/oyster/entry.do(登錄頁面)

HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(Url); 
request.ContentType = "application/x-www-form-urlencoded"; 
request.Credentials = new NetworkCredential(Username, Password); 
request.Method = "POST"; 
request.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"; 
request.Headers.Add("Accept-Language: en-us,en;q=0.5"); 
request.Headers.Add("Accept-Encoding: gzip,deflate"); 
request.Headers.Add("Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7"); 
request.KeepAlive = true; 
request.Headers.Add("Keep-Alive: 300"); 
request.Referer = Url; 
request.UserAgent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.0.3705;)"; 

HttpWebResponse response = (HttpWebResponse)request.GetResponse(); 

using (StreamReader reader = new StreamReader(response.GetResponseStream())) 
{ 
    string tmp = reader.ReadToEnd(); 
} 
+0

(您的行爲涉嫌違反交通局的條款和條件,我想看看,首先...) – 2010-12-01 10:09:40

回答

1

注意Terms and Conditions

以下禁止[...剪斷...]

使用任何自動化系統,軟件 或過程來提取內容和/或數據,包括拖網,數據挖掘 和屏幕抓取。

Credentials是基本的/ etc HTTP安全 - 基於表單的安全性。

如果存在API,最好使用API​​。 HTML表單適用於人類,而不是計算機。它看起來像有一個beta TfL API here

0

該頁面上沒有HTTP身份驗證(基本,摘要,NTLM),因此憑證不會執行任何操作。

您需要構建一個POST到/oyster/security_check,發送用戶名和密碼作爲內容(要發送的數據看起來與查詢字符串中看到的內容相同,如果該表單是GET,例如username=myName&password=myPass。從這個後續的請求。

+0

(注意,這違反了網站的條款; P) – 2010-12-01 10:08:39

0

下面是你可能會發現非常有用的C#類。

這是很簡單易用,並具有基本功能下載的字符串或字節數組。它還可以掃描登錄頁面形式對於某些網站用來防止程序化身份驗證的身份驗證令牌之類的事情,我已經嘗試了許多網站,例如Faceb ook,它似乎工作得很好。

[鏈接刪除]