以下代码未登录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();
}
答案 0 :(得分:5)
在查看雅虎页面的html源代码时,您会注意到有许多隐藏字段
用于保护用户,例如针对CSRF
可能是,您将首先向雅虎发送请求以获取有效的反CSRF令牌,然后将其包含在您的请求中。您还必须查看该网站使用的JavaScript。也许在客户端站点上计算出一些东西,然后使用登录数据发送。
请注意,因为这些网站经常会发生变化,明天您的实施将无法正常工作。
答案 1 :(得分:2)
您将很难以这样的方式登录,我认为这不太可能。 如果您确实需要以编程方式登录,则需要OpenID或OAuth。
答案 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