Когда мне нужно использовать Cookies и HtmlAgilityPack вместе или просто создавать пользовательские запросы (например, установить свойство User-Agent
и т. Д.), Вот что я делаю:
- Создать класс, который инкапсулирует запрос / ответ. Давайте назовем этот класс
WebQuery
- Имейте частное CookieCollection (в вашем случае public ) свойство внутри этого класса
- Создайте метод внутри класса, который выполняет запрос вручную. Подпись может быть:
...
public HtmlAgilityPack.HtmlDocument GetSource(string url);
Что нам нужно делать внутри этого метода?
Хорошо, используя HttpWebRequest и HttpWebResponse , сгенерируйте http-запрос вручную (есть несколько примеров, как это сделать в Интернете), создайте экземпляр класса HtmlDocument
используя конструктор, который получает поток.
Какой поток мы должны использовать? Ну, тот, который возвращается:
httpResponse.GetResponseStream();
Если вы используете HttpWebRequest для выполнения запроса, вы можете легко установить его свойство CookieContainer
в переменную, которую вы объявили перед каждым доступом к новой странице, и таким образом все файлы cookie установленные вами сайты будут правильно храниться в переменной CookieContainer
, которую вы объявили в WebQuery
классе , с учетом того, что вы используете только один экземпляр класса WebQuery
.
Надеюсь, вы найдете это объяснение полезным. Примите во внимание, что используя это, вы можете делать все, что захотите, независимо от того, поддерживает это HtmlAgilityPack или нет.