编写自动登录www.yahoo.com的.NET应用程序的正确方法是什么?

时间:2012-09-13 00:35:21

标签: .net httprequest

以下代码未登录yahoo。应该如何重写?

(当然,“用户名”和“密码”将替换为我的实际帐户名和密码。)

    static void Main(string[] args)
    {
        string input = string.Format("username={0}&passwd={1}", "<username>", "<password>");

        WebRequest request = HttpWebRequest.Create("https://login.yahoo.com/config/login");
        request.Method = "POST";
        request.ContentType = "application/x-www-form-urlencoded";

        StreamWriter writer = new StreamWriter(request.GetRequestStream());
        writer.Write(input);
        writer.Close();

        StreamReader reader = new StreamReader(request.GetResponse().GetResponseStream());

        string x = reader.ReadToEnd();

        Console.Read();
    }

6 个答案:

答案 0 :(得分:5)

在查看雅虎页面的html源代码时,您会注意到有许多隐藏字段

image showing the hidden fields of the form

用于保护用户,例如针对CSRF

可能是,您将首先向雅虎发送请求以获取有效的反CSRF令牌,然后将其包含在您的请求中。您还必须查看该网站使用的JavaScript。也许在客户端站点上计算出一些东西,然后使用登录数据发送。

请注意,因为这些网站经常会发生变化,明天您的实施将无法正常工作。

答案 1 :(得分:2)

您将很难以这样的方式登录,我认为这不太可能。 如果您确实需要以编程方式登录,则需要OpenID或OAuth。

详细了解Yahoo authentication here

答案 2 :(得分:1)

表单上有几个隐藏的输入元素。很可能检查它们是否存在服务器端,可能还有cookie来验证请求是否来自该登录页面。您是否尝试通过HttpWebRequest将它们添加到请求中?

答案 3 :(得分:0)

前一段时间我有类似的任务 - 我必须登录一个网站并从中提取一些数据。没有网络服务来帮助我。我正在使用VB6,我最终做的是创建一个webbrowser对象,加载网页并登录,然后屏幕抓取我需要的数据。

这种方法粗糙且不可靠,如果登录程序包含验证码保护,它将无法正常工作,但它很快并且可以在您尝试找出更优雅和永久的方法时帮助您。

答案 4 :(得分:0)

我有一个html页面,使用登录页面中的一些代码登录到yahoo邮件。它已经工作了一段时间,所以我建议在“[登录]”按钮附近的登录页面上查看html,并找出http请求中需要包含哪些值。

查看我为登录yahoo邮件而写的html页面,你只需要将正确的HIDDEN值传递给服务器,显然你的用户和传递。因此,我建议您检查html表单中的HIDDEN值标记,并尝试查看哪些需要与http Web请求一起发送。基本上以.Net Framework样式重新创建他们的登录页面表单

我希望这会有所帮助:)

答案 5 :(得分:0)

这是一个用工作流程和代码解释OAuth的链接。除了雅虎,Twitter也是一个值得学习的好网站。链接中的一些代码使用Twitter。请注意,OAuth 2.0已经用完了。

http://www.codeproject.com/Articles/131978/Demystifying-OAuth