Я пытаюсь войти на веб-сайт, а затем хожу по нему, чтобы найти информацию и что-то на ней сделать.
Все хорошо, когда запросу не нужны файлы cookie, но какой-то странице нужен файл cookie, который создается при первом запросе. Поэтому я должен собрать все файлы cookie в объекте WebClient.
Я использую этот код, но мне его недостаточно. Потому что мне все еще не хватает всех файлов cookie для следующего запроса.
public class CookieAwareWebClient : WebClient
{
public CookieContainer CookieContainer { get; set; }
public CookieCollection ResponseCookies { get; set; }
//public CookieContainer ResponseCookieContainer { get; set; }
public CookieAwareWebClient()
: base()
{
CookieContainer = new CookieContainer();
ResponseCookies = new CookieCollection();
}
protected override WebRequest GetWebRequest(Uri address)
{
WebRequest request = base.GetWebRequest(address);
HttpWebRequest webRequest = request as HttpWebRequest;
if (webRequest != null)
{
webRequest.CookieContainer = CookieContainer;
}
return request;
}
protected override WebResponse GetWebResponse(WebRequest request)
{
var response = (HttpWebResponse)base.GetWebResponse(request);
this.ResponseCookies = response.Cookies;
return response;
}
Вот мой код для запроса.
var loginLink = "https...."; // an Uri with username and password values as queryString
CookieAwareWebClient client = new CookieAwareWebClient();
var loginResult = client.DownloadString(loginLink);
Я вижу результат, да, я в деле! вход в систему прошел успешно, но я теряю все свои файлы cookie, и следующий запрос отправляет меня на страницу входа ..
Я должен собрать все файлы cookie в моем webcilent cookieContainer. Я должен прочитать заголовок ответа, чтобы установить значения "Set-Cookie" для моего контейнера.
Подумайте об этом, у меня есть 3 ключа в моих файлах cookie перед запросом.
a = "123",
b = "asd",
c = "123"
и теперь я отправляю запрос на веб-сайт, и он возвращает мне 2 файла cookie (один новый, а другой - старый ключ с новым значением) назад (я вижу в заголовках ответов в «Set-Cookie»)
a = "123456",
d = "blabla"
поэтому мне нужно изменить ключ значения «a», и мне нужно добавить ключ «d» к моему файлу cookie, потому что я не хочу снова возвращаться на страницу входа в мой следующий запрос ...
Может быть, мне нужна библиотека, может быть, лучший класс WebClient, который может собрать все кокки, чтобы помочь мне обнаружить все страницы.
Я надеюсь, что кто-то может мне помочь. Наилучшие пожелания!
HttpClient работает хорошо :) Спасибо!





Как выполняется следующий запрос? Кстати, вам не нужны
CookieContainerиCookieCollection. Это одно и то же. Вам просто нужен одинCookieContainer. Не беспокойтесь о заголовкеset-cookie.HttpWebRequestавтоматически обрабатывает этот обмен. Если вы потеряете файлы cookie, то, возможно, вы создали свой собственный классnewвWebClient. Я предлагаю напрямую использоватьWebRequest/WebResponseилиHttpClientи отказываться отWebClient. Как видно из отсутствия базовых инструментов, он не предназначен для такого рода задач (и вы еще даже не имеете дело с кодированием).