2011-03-15 130 views
3

嘿,伙计们,我正在尝试制作一个网站,可以为用户登录其他网站,并获取特定信息。例如:一个基于网络的游戏论坛,可以自动提取您的游戏统计数据。我的网站必须导航到游戏url,填写用户名和密码,登录,然后在登录后阅读html(这是简单的部分,我只是简单地使用HTML敏捷包或类似的东西) 。这个签名过程是否可以通过asp.net进行?使用asp.net登录到其他网站

回答

4

是的。

不要以为去页面和填充东西。你将需要创建一个web request,其中包含正确的HTTP标头和数据,这将看他们的服务器是一个人这些内容充斥着所有内容。您需要查看您正在尝试执行此操作的网站,但我会假设他们在单击登录时发送了一组POST数据。示例,从MSDN和修改,以更接近你所需要的(前几行):

WebRequest request = WebRequest.Create ("http:/www.site.com/loginPostback"); 
request.Method = "POST"; 
// Create POST data and convert it to a byte array. 
string postData = "username=blah;password=blah"; 
byte[] byteArray = Encoding.UTF8.GetBytes (postData); 
// Set the ContentType property of the WebRequest. 
request.ContentType = "application/x-www-form-urlencoded"; 
// Set the ContentLength property of the WebRequest. 
request.ContentLength = byteArray.Length; 
// Get the request stream. 
Stream dataStream = request.GetRequestStream(); 
// Write the data to the request stream. 
dataStream.Write (byteArray, 0, byteArray.Length); 
// Close the Stream object. 
dataStream.Close(); 
// Get the response. 
WebResponse response = request.GetResponse(); 
// Display the status. 
Console.WriteLine (((HttpWebResponse)response).StatusDescription); 
// Get the stream containing content returned by the server. 
dataStream = response.GetResponseStream(); 
// Open the stream using a StreamReader for easy access. 
StreamReader reader = new StreamReader (dataStream); 
// Read the content. 
string responseFromServer = reader.ReadToEnd(); 
// Display the content. 
Console.WriteLine (responseFromServer); 
// Clean up the streams. 
reader.Close(); 
dataStream.Close(); 
response.Close(); 

然后,您可以查看响应流的HTML登录您需要的信息后发送回服务器。

这就是说,你可能想联系他们,看看他们是否有一个API。如果他们改变他们的登录表单的工作方式,你会打破。或者,如果该网站支持类似OAuth的内容,请转到该路线。

0

这很大程度上取决于如何在目标网站上实施身份验证。但是当它到达它时,它全是HTML和HTTP [标题],所以它绝对是可行的。

虽然处理所有可能的身份验证方案将是一场噩梦,所以祝你好运。 =)

0

为什么不考虑通过一个流行的网站,如OpenID,Facebook或一些公开可用的授权存储的一些其他身份验证机制?

布赖恩

1

这听起来像OpenID工作。

+0

好奇OpenID在这里会有帮助吗?我认为OAuth将成为他正在寻找的东西? OpenID是面向用户的 - 允许共同的身份。 OAuth是通过编程语言进行跨应用程序授权的。 – Parrots 2011-03-15 17:17:21

+0

对于OpenID或OAuth,其他网站(本例中为游戏网站)是否必须安装软件?我有几个需要访问的网站,它们没有像安装的那样的开放标准。 – Rob 2011-03-15 17:25:57

+0

是的,如果您要使用该网站,则该网站需要支持OAuth,为什么您必须使用网络请求“伪造”这些内容。 – Parrots 2011-03-15 19:00:55

3

登录过程因地点而异。使用Fiddler2并首先正常登录到站点以查看您需要的信息。然后在您的代码中使用WebClient来设置正确的参数并登录。然后介意cookies! WebClient将返回cookie。如果您抓取多页,请确保您再次设置Cookie,以便您仍然登录。

在极少数情况下使用HTTP身份验证。如果是这样,请在提出请求之前,在WebClient中设置Credentials

1

通常情况下,像这样的人使用SSO (Single Sign On)

但是,您可以针对要使用.Net登录的站点执行后期注入。它需要一点工作,你需要知道表单发布的位置和通过的值。另外,您还必须为每个站点添加不同的后期注入,以便尝试登录(这会非常麻烦)。

如果可能,我推荐SSO。