2010-12-01 100 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,它似乎工作得很好。

[链接删除]