2009-05-28 7 views
1
import cgitb 
import Cookie, urllib2 
from cookielib import FileCookieJar 
cgitb.enable() 
c = Cookie.SmartCookie() 
c['ini'] = 1 
savedc = FileCookieJar() 
savedc.add_cookie_header(c.output()) 
savedc.save() 

shoulden't dies das Cookie speichern? ...Python Plätzchen Frage

Ich habe wie eine Million Mal über die Python-Dokumentation zu lesen, ich bekomme es einfach nicht :(

bitte jemand helfen :(

+0

Warum gibt es kein "()" nach "FileCookieJar"? –

+0

hi ich reparierte das und es funktioniert immer noch nicht? .. –

Antwort

0

Stellen Sie sicher, benennen Sie die Datei zum speichern von Cookies in:

savedc = FileCookieJar('cookies.txt') 

add_cookie_header nimmt ein Request-Objekt; set_cookie dauert ein Cookie. Wie es in der Dokumentation heißt, löst FileCookieJar.save "NotImplementedError. Unterklassen lassen diese Methode möglicherweise nicht implementiert." Ich nehme an, du hättest 1 mal die Dokumentation 1E6 + lesen sollen.

+1

autsch ... dein letzter Satz über die Dokumentation klingt nicht zu freundlich –

+0

es scheint immer noch nicht zu speichern? ... wenn ich öffne und schließen mozzila firefox der Cookie ist verschwunden? .. –

+0

Wie speichern Sie tatsächlich Cookies in eine Datei?Die save-Methode löst eine Ausnahme aus und das Programm stoppt und es gibt keine Datei mit Cookies. Ich bin neu in Python und verstehe nicht, warum diese Methode das Programm stoppt ... – Azimuth

5

Raf, alles was ich sagen kann ist, Egads! Die Dokumentation ist sicherlich nicht klar! Ich benutze Python seit Jahren und diese einfache Stack-Overflow-Frage, von der ich dachte, dass ich sie schnell lesen würde, bevor ich mit der Arbeit an diesem Tag angefangen habe, brauchte mehr als zwanzig Minuten, um zu antworten. :-)

Erstens: Es stellt sich heraus, dass die "Cookie" -Bibliothek und die "cookielib" -Bibliothek völlig voneinander getrennt sind und nichts miteinander zu tun haben. Dies ist in der Dokumentation angegeben, Sie müssen jedoch auf jeder Dokumentationsseite zum Abschnitt "Siehe auch" scrollen, um dies herauszufinden. Es wäre hilfreich, wenn dies stattdessen oben auf jeder Seite wäre.

Also, wenn Sie ein Objekt aus der "Cookie" Bibliothek in "cookielib" übergeben, verwirren Sie die "cookielib" Interna, weil es Cookies in Wörterbüchern speichert und ein "Cookie" Cookie aussieht - raten Sie mal! - ein Wörterbuch, also "cookielib" verwechselt es für eine seiner eigenen internen Datenstrukturen und speichert andere Cookies darin. Der Fehler, den ich als Ergebnis erhalten, ist:

<type 'exceptions.AttributeError'>: 'str' object has no attribute 'discard' 
    args = ("'str' object has no attribute 'discard'",) 
    message = "'str' object has no attribute 'discard'" 

Eigentlich ist das der Fehler ich nach kleben ein paar Attribute auf dem Cookie.Cookie Objekt zu erhalten, die dort nicht gehören, sondern dass ich hinzugefügt, bevor ich erkannte, dass ich in der hoffnungslosen Aufgabe beschäftigt war zu versuchen, einen Cookie.Cookie wie ein cookielib.Cookie zu verhalten. :-) Die früheren Fehler waren alle attribut fehlende Fehler wie:

<class 'Cookie.CookieError'>: Invalid Attribute name 
    args = ('Invalid Attribute name',) 
    message = 'Invalid Attribute name' 

(Und ich mischt die Fehler hier, falls einige schlechte Zukunft Seele die Cookie-Klassen und macht die Google-Suchanfragen gerade dabei habe ich, Keiner von denen ergab keine Ergebnisse für die Fehler, die ich bekam!)

Also bevor wir weiter gehen, muss ich wissen: Sie versuchen, wie ein Web Server zu handeln, liefern Cookies an Kunden und versuchen zu bekommen Sie sind wieder intakt, wenn der Client die nächste Anfrage sendet. In diesem Fall sollte ich Ihnen zeigen, wie das Modul "Cookie" funktioniert. Oder schreibst du einen Web-Client, zum Testen oder zum Spaß, der mit den Cookies, die er mit einer Web-Anfrage an eine Webseite sendet, nicht klar kommt, in welchem ​​Fall wir über "cookielib" sprechen sollten?

+0

Wow ... fantastische Antwort. –