Действительно ли возможно передать аутентификацию от Webbrowser до WebRequest

Я использую управление webbrowser для входа в систему в любой сайт. И затем я хочу загрузить некоторое sub использование HTML страницы WebRequest (или WebClient). Это связывается, должен требовать аутентификации.

Как передать информацию аутентификации Webbrowser Webrequest или Webclient?

36
задан ebattulga 1 August 2010 в 15:41
поделиться

5 ответов

Если вы можете получить необходимые файлы cookie из элемента управления WebBrowser после того, как они установлены сайтом, вы входите в систему, вы должны иметь возможность использовать те же файлы cookie с WebRequest / WebClient.

В этой статье рассказывается, как использовать файлы cookie с WebClient; вы должны создать его подкласс, но требуется только одно переопределение.

1
ответ дан 27 November 2019 в 05:59
поделиться

Нелегко выполнить то, что вы пытаетесь сделать. Сервер может использовать один из двух типов аутентификации с клиентом (браузером)

1) Транспортная аутентификация 2) Формы на основе авторизации.

Транспортная аутентификация: в этом случае аутентификация выполняется с использованием самого транспортного соединения - здесь для аутентификации будут использоваться пользовательские заголовки HTTP с многосторонним рукопожатием.

Авторизация на основе форм: это традиционная авторизация, которая выполняется, когда вы вводите свои учетные данные в форму.

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

Если все, что вы хотите сделать, это загрузить что-то, я бы посмотрел, могу ли я использовать средства браузера, например, XmlHttpRequest или какой-либо другой механизм ajax, чтобы загрузить то, что вы хотите, как часть DOM страницы, на которой размещен контроль. Затем вы можете прочитать это содержимое из своего элемента управления, или вы также можете заставить браузер вводить это содержимое в ваш элемент управления с помощью Javascript, вызывающего метод / свойство в вашем элементе управления.

[EDIT]

Узнайте (используя плагин Firebug в firefox), как именно аутентификация на основе форм выполняется в браузере. Затем вы можете написать код, который будет выполнять тот же запрос / ответ, что и браузер.Для веб-сайта клиент будет выглядеть как любой другой клиент на основе браузера. После этого вы сможете скачать с веб-сайта все, что захотите.

Надеюсь, это поможет.

0
ответ дан 27 November 2019 в 05:59
поделиться

Один из возможных способов сделать это - получить куки с помощью функции InternetGetCookie, построить соответствующий объект cookie и использовать его для CookieContainer

Для получения куки HttpOnly используйте InternetGetCookieEx

Вот некоторые примеры:

InternetGetCookie() в .NET

Загрузка с помощью Cookies Internet Explorer

2
ответ дан 27 November 2019 в 05:59
поделиться

Вы должны иметь доступ к файлам cookie элемента управления WebBrowser с помощью .Document.Cookie , затем в своем HTTPWebRequest вы можете добавить этот файл cookie в свой файл cookie. контейнер.
Вот пример (VB.NET, потому что я там больше всего знаком):

Dim browser As New WebBrowser()
/*Do stuff here to auth with your webbrowser and get a cookie.*/

Dim myURL As String = "http://theUrlIWant.com/"
Dim request As New HTTPWebRequest(myURL)
request.CookieContainer = New CookieContainer()
request.CookieContainer.SetCookies(myURL, browser.Document.Cookie)

И это должно передать cookie из вашего WebBrowser управления в ваш класс HTTPWebRequest .

3
ответ дан 27 November 2019 в 05:59
поделиться

Я действительно столкнулся с той же проблемой на платформе Windows Mobile, и единственное, что сработало, - это расширить элемент управления WebBrowser (используя C ++: <) для захвата переменных POST / GET перед отправкой запроса.

Эта библиотека может вам помочь:

http://www.codeproject.com/KB/miscctrl/csEXWB.aspx

«..библиотека реализует пакет PassthroughAPP Игоря Тандетника, который позволяет клиенту для перехвата всех запросов и ответов HTTP и HTTPS »

. Таким образом, хотя невозможно получить переменные POST / GET, используемые для вашей базовой аутентификации, в стандартном элементе управления WebBrowser, это было бы возможно, если бы вы использовали расширенный элемент управления, такой как пример, который я связал - на самом деле многие элементы управления "Extended WebBrowser" созданы из-за проблем, очень похожих на вашу. К сожалению, насколько мне известно, это нужно делать с помощью неуправляемого кода / c ++ :(.

0
ответ дан 27 November 2019 в 05:59
поделиться
Другие вопросы по тегам:

Похожие вопросы: