HTTP-Conduit-Browser-Nutzung

8

Ich versuche mit HTTPS Daten von einer Site zu scrappen. Ich habe es geschafft, grundlegende Anfragen mit Network.HTTP.Conduit erfolgreich zu stellen (Anmeldeinformationen zu senden, etc.), konnte aber keine Cookie-Informationen aus den Antwortheadern extrahieren (Set-Cookie). Es sieht so aus, als ob http-Conduit seine eigener Mechanismus zum Umgang mit Cookies, den ich nicht verstanden habe.

Network.HTTP.Conduit.Browser scheint sich automatisch mit Cookies zu beschäftigen (was für mich in Ordnung ist), aber ich konnte es wegen fehlender Dokumentation .

Könnte jemand mit mehr Erfahrung im Umgang mit dem http-Conduit-Browser-Modul mir zeigen, wie ich:

  1. Befasse dich mit selbstsignierten Zertifikaten (das habe ich mit managerCheckCerts im Basismodul)
  2. Senden Sie eine POST-Anfrage mit URL-codierten Parametern im Textkörper, ohne Weiterleitungen zu folgen (ich habe urlEncodedBody aus dem Basismodul dafür
  3. Verwenden Sie den Cookie aus dem 2. Schritt in einer einfachen GET-Anfrage und lesen Sie die Antwort als (faulen) ByteString (ich hätte Ссылка für diese)

Für mich sieht es so aus als wäre die Abstraktionsstufe von Network.HTTP.Conduit.Browser für meine Anwendung besser geeignet als bei Network.HTTP.Conduit, also würde ich gerne den Switch machen, auch wenn ich manuell mit Cookies umgehen könnte Letzteres.

    
akosch 26.02.2012, 12:00
quelle

1 Antwort

2

Ich habe noch nie Browser benutzt, aber ich habe http-Conduit benutzt. Ich lese den Quellcode, um diese Fragen zu beantworten, ich entschuldige mich, wenn ich Fehler mache.

  1. Mach dasselbe, was du tust. Wenn Sie die Manager mit der richtigen managerCheckCerts erstellt haben, übergeben Sie diese an browse :: Manager -> BrowserAction a -> ResourceT IO a .

  2. makeRequest :: Request IO -> BrowserAction (Response (Source IO BS.ByteString)) benötigt Request IO ; Verwenden Sie urlEncodedBody wie zuvor, um eine POST-Anfrage mit Parametern im Textkörper zu erstellen und an makeRequest weiterzuleiten. Setzen Sie redirectCount auf 0, um die Weiterleitung zu deaktivieren, glaube ich.

  3. Ich glaube, Sie müssen nur getCookieJar :: BrowserAction CookieJar ; Das BrowserAction kommt von getBrowserState :: BrowserAction BrowserState .

Die Art und Weise, wie HTTP-Conduit Cookies außerhalb des Browser-Moduls verwaltet, ist dies nicht. Cookies werden in der HTTP-Antwort zurückgegeben. Sie können die Antwort analysieren und die Cookies in einem Keksbehälter aufbewahren. Das ist eigentlich alles Browser wirklich.

    
hao 04.01.2013 21:57
quelle