我正在编写一个小的C#代码测试片段,它登录到Facebook并捕获cookie。我这样做只是出于教育目的。我被赋予了一项任务,在我的工作和第三方之间自动上传、下载和表单提交,这是我必须把它做好的事情之一,而且我必须在第一次就把它做好;因此,我认为我会对Facebook和其他一些网络服务进行一些练习。
我有:
string postMessage = "user=" + username + "&pass=" + password;
CookieContainer cookieJar = new CookieContainer();
MessageBox.Show(cookieJar.Count + " cookies"); // 0 cookies, as expected.
HttpWebRequest wReq
= (HttpWebRequest)HttpWebRequest.Create("https://www.facebook.com/login.php");
wReq.Proxy = HttpWebRequest.GetSystemWebProxy();
wReq.Proxy.Credentials = CredentialCache.DefaultCredentials;
wReq.UserAgent
= "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/534.24 "
+ "(KHTML, like Gecko) Chrome/11.0.696.65 Safari/534.24";
wReq.CookieContainer = cookieJar;
wReq.Method = "POST";
wReq.ContentLength = postMessage.Length;
wReq.ContentType = "application/x-www-form-urlencoded";
StreamWriter sw = null;
try
{
sw = new StreamWriter(wReq.GetRequestStream());
sw.Write(postMessage);
}
catch
{
return false;
}
finally
{
sw.Close();
}
string result = string.Empty;
HttpWebResponse wResp = (HttpWebResponse)wReq.GetResponse();
using (StreamReader sr = new StreamReader(wResp.GetResponseStream()))
{
result = sr.ReadToEnd();
sr.Close(); // BREAKPOINT 1
}
MessageBox.Show(cookieJar.Count + " cookies"); // 6 cookies.
wReq
= (HttpWebRequest)HttpWebRequest.Create("http://www.facebook.com/home.php");
wReq.Proxy = HttpWebRequest.GetSystemWebProxy();
wReq.Proxy.Credentials = CredentialCache.DefaultCredentials;
wReq.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/534.24 "
+ "(KHTML, like Gecko) Chrome/11.0.696.65 Safari/534.24";
wReq.CookieContainer = cookieJar;
result = string.Empty;
wResp = (HttpWebResponse)wReq.GetResponse();
using (StreamReader sr = new StreamReader(wResp.GetResponseStream()))
{
result = sr.ReadToEnd();
sr.Close(); // BREAKPOINT 2
}
如果我在断点 1 处检查result
,我可以看到结果包含 Facebook 登录页面的 html 代码。它告诉我,即使我的cookiaJar
捕获了 6 个 cookie,我的浏览器中也没有启用 cookie。
同样,如果我在断点 2 处检查result
,我可以看到 html 代码告诉我"我必须登录才能看到此页面"。
现在,我知道Facebook在没有JavaScript的情况下工作,我在我的cookieJar
中捕获了6个cookie。我有点困惑为什么这不起作用?
(顺便说一下,我的密码有大写,小写,数字和符号。我需要用URLEncode()
编码吗?我已使用纯文本密码成功登录其他网站,而无需对密码进行编码。
您从用于登录的https切换到用于读取的http。 尝试将第二次读取更改为使用 https,看看是否有帮助。