5

以下代码未登录 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();
    }
4

6 回答 6

5

查看 yahoo 页面的 html 源代码时,您会注意到有很多隐藏字段

显示表单隐藏字段的图像

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

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

请注意,因为这些站点经常更改,也许明天您的实施将无法正常工作。

于 2012-09-20T18:49:47.330 回答
2

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

在此处阅读有关雅虎身份验证的更多信息

于 2012-09-21T15:51:29.667 回答
1

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

于 2012-09-20T18:33:55.733 回答
0

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

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

我希望这有帮助 :)

于 2012-09-21T21:38:44.310 回答
0

不久前我有一个类似的任务——我必须登录一个网站并从中提取一些数据。没有网络服务可以帮助我。我使用的是 VB6,我最终做的是创建一个 webbrowser 对象,加载网页并像这样登录,然后屏幕抓取我需要的数据。

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

于 2012-09-21T17:40:01.383 回答
0

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

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

于 2012-09-22T08:24:13.690 回答