WebBrowser Control загрузить файл в сеансе - PullRequest
6 голосов
/ 20 ноября 2010

Я использую WebBrowser control для навигации по странице входа в систему и загрузки файла.Поскольку я не могу найти способ управлять загрузкой автоматически с помощью элемента управления, я пытаюсь добиться этого с помощью класса WebClient.

Проблема в том, что WebClient не входит втот же контекст / сеанс, что и в браузере, все, что я загружаю, - это экран ошибки безопасности.

Есть идеи, как передать контекст сеанса WebBrowser в WebClient?

Ответы [ 2 ]

11 голосов
/ 24 апреля 2013

После одной недели, пытаясь найти решение, я нашел такое простое!

Я хочу, чтобы вы молча загрузили файл с URL-адресом HTTPS, а веб-браузер просто сделал это.

1) Войти через веб-браузер 2) используйте этот код для загрузки.

//build de URL 

  string _url = "https://........."

  //define a download file name and location

  string _filename = @"C:\Users\John\Documents\somefile.pdf";

  //create a webcliente

  WebClient cliente = new WebClient();

  //do some magic here (pass the webbrowser cokies to the webclient)

  cliente.Headers.Add(HttpRequestHeader.Cookie, webBrowser1.Document.Cookie);

  //and just download the file

  cliente.DownloadFile(_urlpdf, _filename);

Это решило мою проблему

3 голосов
/ 20 ноября 2010

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

Вот как я буду действовать.

  1. Получение файлов cookie и заголовков из WebBrowser.

    Файлы cookie: Вы можете получить файлы cookie из сеанса WebBrowser с помощьюобработка события DocumentCompleted элемента управления WebBrowser и разбор набора файлов cookie из события DocumentCompleted.

    Заголовки: используйте прокси-сервер, например Fiddler [www.fiddler2.com/], чтобы прочитать заголовки, чтобы вы знали, что требуется длясервер.

  2. Используйте идентификаторы, собранные выше для WebClient.

    Заголовки: перебирайте все собранные заголовки и убедитесь, что они добавлен к веб-клиенту с использованием myWebClient.Headers.Add("Content-Type","application/x-www-form-urlencoded"); например

    Cookies: см. этот пост .

...