2010-11-20 37 views
6

Tôi đang sử dụng WebBrowser control để điều hướng qua trang đăng nhập và tải xuống tệp. Vì tôi không thể tìm cách quản lý tải xuống tự động bằng điều khiển, tôi đang sử dụng lớp WebClient để thử và đạt được điều này.Tệp tải xuống WebBrowser kiểm soát trong phiên

Vấn đề là do WebClient không có cùng ngữ cảnh/phiên khi trình duyệt tôi đang tải xuống là màn hình Lỗi bảo mật.

Bất kỳ ý tưởng nào về cách tôi có thể chuyển ngữ cảnh của phiên WebBrowser sang WebClient?

+0

Một câu trả lời cuối để tham khảo trong tương lai: 'URLDownloadToCacheFile' [có thể được sử dụng cho việc này] (http://stackoverflow.com/a/19025793/1768303). – Noseratio

Trả lời

3

Nó chỉ đơn giản là vấn đề mô phỏng cookie và tiêu đề trong phiên WebBrowser và tái sử dụng chúng để mạo danh phiên trong WebClient, nhưng có vẻ như bạn đã nóng trên đường dẫn đó.

Đây là cách tôi sẽ tiếp tục.

  1. Tải cookie và tiêu đề từ WebBrowser.

    Cookie: Bạn có thể lấy cookie từ phiên WebBrowser bằng cách xử lý sự kiện DocumentCompleted của điều khiển WebBrowser và phân tích cú pháp tập hợp cookie từ sự kiện DocumentCompleted.

    Tiêu đề: Sử dụng proxy như Fiddler [www.fiddler2.com/] để đọc tiêu đề, do đó bạn sẽ biết những gì máy chủ yêu cầu.

  2. Sử dụng danh tính được thu thập ở trên cho WebClient.

    Headers: Lặp lại qua tất cả các phần đầu thu của bạn và chắc chắn họ đang added to the webclient sử dụng myWebClient.Headers.Add("Content-Type","application/x-www-form-urlencoded"); ví dụ

    Cookies: Xem this post.

+0

Tôi bắt đầu kiểm tra điều này. Nó sẽ mất một chút thời gian nhưng tôi sẽ cho bạn biết làm thế nào tôi đi. Cảm ơn –

+0

điều này đã hoạt động, cảm ơn –

11

Sau một tuần googling một cố gắng cho một giải pháp tôi tìm thấy một trong đó là đơn giản như vậy!

Tôi cho bạn biết những gì để âm thầm tải xuống tệp trong URL HTTPS và điều khiển trình duyệt web chỉ thực hiện việc này.

1) Đăng nhập bằng webbrowser 2) sử dụng mã này để tải xuống.

//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); 

Nó giải quyết vấn đề của tôi

+1

Cảm ơn! Tôi thực sự đã làm việc. Bạn đã cứu tôi rất nhiều thời gian. –

+0

Bạn đã an toàn cuộc sống của tôi với coockies !! –

Các vấn đề liên quan