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

什么';编写自动登录www.yahoo.com的.NET应用程序的正确方法是什么?,.net,httprequest,.net,Httprequest,以下代码没有登录到yahoo。该如何重写 (当然,“用户名”和“密码”将替换为我的实际帐户名和密码。) static void Main(字符串[]args) { 字符串输入=string.Format(“username={0}&passwd={1}”,“”,“”); WebRequest=HttpWebRequest.Create(“https://login.yahoo.com/config/login"); request.Method=“POST”; request.ContentTy

以下代码没有登录到yahoo。该如何重写

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

static void Main(字符串[]args)
{
字符串输入=string.Format(“username={0}&passwd={1}”,“”,“”);
WebRequest=HttpWebRequest.Create(“https://login.yahoo.com/config/login");
request.Method=“POST”;
request.ContentType=“application/x-www-form-urlencoded”;
StreamWriter writer=新的StreamWriter(request.GetRequestStream());
writer.Write(输入);
writer.Close();
StreamReader=新的StreamReader(request.GetResponse().GetResponseStream());
字符串x=reader.ReadToEnd();
Console.Read();
}

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

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

用于保护用户,例如防止

也许,你需要先向雅虎发送一个请求,获取一个有效的反CSRF令牌,然后将其包含在你的请求中。您还必须查看该站点使用的javascript。可能在客户端站点上计算了一些内容,然后将其和登录数据一起发送


请注意,因为这些站点经常更改,可能明天您的实现将无法工作。

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


阅读更多关于

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


这种方法既粗糙又不可靠,如果登录过程包括验证码保护,它将不起作用,但它很快,可能会帮助您找到一种更优雅、更持久的方法。

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

查看我为登录yahoo mail而编写的html页面,您只需将正确的隐藏值传递给服务器,当然还需要用户和pass。因此,我建议您检查html表单中的隐藏值标记,并进行实验,看看哪些标记需要与http web请求一起发送。基本上是以.Net Framework样式重新创建他们的登录页面表单


我希望这能有所帮助:)

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


我尝试了编码。它不起作用。无论如何,没有非ANSI字符。
    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();
    }