2012-02-26 24 views
8

Tôi đang cố gắng xóa dữ liệu khỏi một trang web bằng HTTPS. Tôi quản lý để thực hiện các yêu cầu cơ bản bằng cách sử dụng Network.HTTP.Conduit thành công (đăng thông tin đăng nhập, v.v.), nhưng không thành công khi trích xuất thông tin cookie từ các tiêu đề phản hồi (Set-Cookie). Có vẻ như http-conduit có số own mechanism để xử lý cookie, điều mà tôi không hiểu được.cách sử dụng trình duyệt http-ống dẫn

Network.HTTP.Conduit.Browser dường như xử lý các cookie tự động (điều này là tốt cho tôi), nhưng tôi không thể làm cho nó hoạt động do thiếu documentation.

một người có nhiều kinh nghiệm đối phó với các mô-đun trình duyệt http-ống dẫn có thể chỉ cho tôi làm thế nào để:

  1. Deal với chứng chỉ tự ký (tôi cố gắng làm điều này với managerCheckCerts trong module cơ sở)
  2. Gửi yêu cầu POST với thông số được mã hóa URL trong nội dung, không theo bất kỳ chuyển hướng nào (tôi đã sử dụng urlEncodedBody từ mô-đun cơ sở cho việc này)
  3. Sử dụng cookie từ bước 2. trong yêu cầu GET đơn giản và đọc phản hồi dưới dạng (lười biếng) ByteString (Tôi đã sử dụng httpLbs cho việc này)

Với tôi, có vẻ như mức trừu tượng của Network.HTTP.Conduit.Browser phù hợp hơn với ứng dụng của tôi so với Network.HTTP.Conduit, vì vậy tôi muốn thực hiện chuyển đổi ngay cả khi tôi có thể xử lý cookie theo cách thủ công bằng cách sử dụng sau.

+0

Tôi cũng gặp sự cố khi tìm tài liệu và có vẻ như mã nguồn có mã ví dụ: https://github.com/exbb2/http-conduit-browser/blob/master/Network/HTTP/Conduit/Browser.hs – Lionel

Trả lời

2

Tôi chưa bao giờ sử dụng Trình duyệt, nhưng tôi đã sử dụng http-conduit. Tôi đọc mã nguồn để trả lời những câu hỏi này, tôi xin lỗi nếu tôi phạm sai lầm.

  1. Làm điều tương tự bạn đang làm. Khi bạn đã tạo Manager với quyền managerCheckCerts, hãy chuyển số đó dọc theo browse :: Manager -> BrowserAction a -> ResourceT IO a.

  2. makeRequest :: Request IO -> BrowserAction (Response (Source IO BS.ByteString)) mất Request IO; sử dụng urlEncodedBody như trước để tạo yêu cầu POST có thông số trong cơ thể và chuyển nó đến makeRequest. Đặt redirectCount thành 0 để tắt chuyển hướng sau, tôi tin.

  3. Tôi tin rằng bạn chỉ cần sử dụng getCookieJar :: BrowserAction CookieJar; số BrowserAction xuất phát từ getBrowserState :: BrowserAction BrowserState.

Cách thức http-đường dẫn quản lý cookie bên ngoài mô-đun Trình duyệt là không. Cookie được trả lại trong phản hồi HTTP; những gì bạn có thể làm là phân tích cú pháp phản hồi và lưu trữ các cookie trong một lọ cookie. Đó thực sự là tất cả các trình duyệt thực sự.

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