C # веб-сервер не видит сохраненные куки - PullRequest
2 голосов
/ 16 мая 2011

Я пишу небольшой тестовый фрагмент кода C #, который входит в Facebook и захватывает куки.Я делаю это только в образовательных целях.Мне было дано задание автоматизировать загрузку, загрузку и отправку форм между моей работой и третьей стороной, и это одна из тех вещей, где я должен сделать это правильно, и я должен сделать это правильно с первого раза;поэтому я решил немного потренироваться с 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
}

Если я проверю result в точке останова 1, я вижуРезультат содержит HTML-код для страницы входа в Facebook.Это говорит мне, что куки не включены в моем браузере, хотя мой cookiaJar захватил 6 куки.

Аналогично, если я проверяю result в точке останова 2, я вижу HTML-код, который говоритмне "Я должен войти, чтобы увидеть эту страницу".

Теперь я знаю, что Facebook работает без JavaScript, и я собираю 6 файлов cookie в моем cookieJar.Я немного запутался, почему это не работает?

(Кстати, мой пароль состоит из прописных, строчных букв, цифр и символов. Нужно ли мне кодировать его с помощью URLEncode()? У меня естьуспешно вошел на другой веб-сайт, используя простой текстовый пароль без кодировки пароля.)

1 Ответ

1 голос
/ 16 августа 2011

Вы переключаетесь с https для входа в систему для http для чтения. Попробуйте изменить второе чтение на использование https и посмотрите, поможет ли это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...