Intereting Posts
XPath для выбора раздела статьи Как получить текст из этого тега html с помощью jsoup? На оверлее на карте Google, как создать строки между элементами SVG в D3 Отображать изображения Inline через CSS Как разбить строку в JavaScript? RegEx соответствуют открытым тегам, за исключением тегов XHTML Onclick продолжает возвращаться к своему первоначальному значению как переписать выбор и вариант наведения и цвет в списке выбора с помощью Bootstrap? Получить атрибуты атрибута rel с помощью jQuery нужно исправить html и добавлять значения с помощью javascript Проблема с иконкой Navbar в jQuery mobile Как добавить / обновить атрибут элемента HTML с помощью JavaScript? Рекомендации для мест, где я могу получить хорошие проекты css / web 2.0ish кнопки, таблицы и т. Д. Комплексная ошибка Webkit? Относительная позиция + Z-Индекс + Переполнение Скрытое + Преобразование CSS3 Как создать зеркальный эффект на курсор на веб-странице?

Принимать Cookies в WebClient?

Я только начал экспериментировать с C # WebClient . У меня есть код ниже, который получает html-код с веб-сайта и записывает его в .txt-файл. Единственная проблема, с которой я сталкиваюсь, заключается в том, что на некоторых веб-сайтах вам необходимо принять cookies, прежде чем вы сможете использовать веб-сайт. Это связано с тем, что вместо написания реального HTML-кода веб-сайта в файл .txt он записывает код cookie popt html.

Код:

 string downloadedString; System.Net.WebClient client; client = new System.Net.WebClient(); //"http://nl.wikipedia.org/wiki/Lijst_van_spelers_van_het_Nederlands_voetbalelftal" downloadedString = client.DownloadString(textBox1.Text); using (StreamWriter write = new StreamWriter("Data.txt")) { write.Write(downloadedString); } 

Итак, каково решение этого? Может ли кто-нибудь направить меня на правильный путь?

Применение :

  CookieContainer cookieJar = new CookieContainer(); cookieJar.Add(new Cookie("my_cookie", "cookie_value", "/", "mysite")); CookieAwareWebClient client = new CookieAwareWebClient(cookieJar); string response = client.DownloadString("http://example.com/response_with_cookie_only.php"); 

 public class CookieAwareWebClient : WebClient { public CookieContainer CookieContainer { get; set; } public Uri Uri { get; set; } public CookieAwareWebClient() : this(new CookieContainer()) { } public CookieAwareWebClient(CookieContainer cookies) { this.CookieContainer = cookies; } protected override WebRequest GetWebRequest(Uri address) { WebRequest request = base.GetWebRequest(address); if (request is HttpWebRequest) { (request as HttpWebRequest).CookieContainer = this.CookieContainer; } HttpWebRequest httpRequest = (HttpWebRequest)request; httpRequest.AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate; return httpRequest; } protected override WebResponse GetWebResponse(WebRequest request) { WebResponse response = base.GetWebResponse(request); String setCookieHeader = response.Headers[HttpResponseHeader.SetCookie]; //do something if needed to parse out the cookie. if (setCookieHeader != null) { Cookie cookie = new Cookie(); //create cookie this.CookieContainer.Add(cookie); } return response; } } 

Вы увидите два переопределенных метода для GetWebRequest и GetWebResponse. Эти методы можно переопределить для обработки контейнера cookie.

Просто сохраните строку cookie из заголовков в свою локальную сессию. _Cookies string

 if (System.Web.HttpContext.Current.Session["cookie"] != null) _cookies = System.Web.HttpContext.Current.Session["cookie"].ToString(); using (WebClient wc = new WebClient()) { wc.Headers.Add("Cookie", _cookies); string HtmlResult = wc.UploadString(bridge_url, myParameters); _cookies = wc.ResponseHeaders["Set-Cookie"]; Debug.WriteLine("Headers" + _cookies); System.Web.HttpContext.Current.Session["cookie"] = _cookies; } 

Это может быть близким дублированием. Как я могу заставить WebClient использовать Cookies?

Вопрос, на который я ссылался выше, для VB.NET, но механизм должен быть тем же самым для C #. Я подозреваю, что поведение, которое вы видите, означает, что веб-сайт отправляет куки-файл, а затем запрашивает его, но ваш клиент не настроен на возврат cookie на сервер, поэтому он интерпретирует это, поскольку вы не принимаете cookies ».

Используете ли вы инструмент анализа, например Fiddler, для анализа того, что сообщается / от вашего клиента?

Вам также может потребоваться отправить определенный HTTP-заголовок, чтобы указать, что вы принимаете cookies, но я не помню, что это было необходимо в моем прошлом опыте.