2009-05-28 6 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 ce sauver le cookie? ...question Python Cookies

j'ai lu sur la documentation python comme 1 million de fois, je ne comprends pas :(

s'il vous plaît aider quelqu'un :(

+0

Pourquoi n'y a-t-il pas "()" après "FileCookieJar"? –

+0

salut je l'ai réparé et ça ne fonctionne toujours pas .. .. –

Répondre

0

Assurez-vous que vous nommez le fichier pour stocker les cookies dans:

savedc = FileCookieJar('cookies.txt') 

add_cookie_header prend un objet de requête; set_cookie prend un cookie. Comme il est dit dans la documentation, FileCookieJar.save "soulève NotImplementedError" Les sous-classes peuvent laisser cette méthode non implémentée. " Je suppose que vous devriez avoir essayé de lire la documentation 1E6 + 1 fois.

+1

ouch ... votre dernière phrase sur la documentation ne sonne pas trop amical –

+0

il ne semble toujours pas sauver si ... quand j'ouvre et fermer mozzila firefox le cookie est disapered? .. –

+0

Comment enregistrer des cookies dans un fichier?La méthode save déclenche une exception et le programme s'arrête et il n'y a pas de fichier avec des cookies. Je suis nouveau en Python et je ne comprends pas pourquoi cette méthode arrête le programme ... – Azimuth

5

Raf, tout ce que je peux dire est, Egads! La documentation est certainement pas effacer! J'ai utilisé Python pendant des années et cette simple question Stack Overflow que je pensais avoir rapidement avant de commencer un vrai travail pour la journée m'a pris plus de vingt minutes pour répondre. :-)

Premièrement: il s'avère que la bibliothèque "Cookie" et la bibliothèque "cookielib" sont complètement séparées et n'ont rien à voir l'une avec l'autre. Cela est indiqué dans la documentation, mais vous devez faire défiler jusqu'à la section "Voir aussi" de chaque page de documentation pour le découvrir. Il serait utile que ce soit en haut de chaque page à la place. Ainsi, lorsque vous passez un objet de la bibliothèque "Cookie" dans "cookielib", vous confondez les internes "cookielib" car il stocke les cookies dans les dictionnaires et un cookie "Cookie" ressemble à - devinez quoi! - un dictionnaire, donc "cookielib" le confond avec l'une de ses propres structures de données internes et enregistre d'autres cookies à l'intérieur de celui-ci. L'erreur que je reçois comme résultat:

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

En fait, c'est l'erreur que je reçois après coller un tas d'attributs sur l'objet Cookie.Cookie qui n'appartiennent pas là, mais que j'ajouté avant J'ai réalisé que j'étais engagé dans la tâche désespérée d'essayer d'obtenir un Cookie.Cookie pour se comporter comme un cookielib.Cookie. :-) Les erreurs antérieures étaient toutes les erreurs d'attributs manquantes comme:

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

(Et je suis en train de les erreurs ici dans le cas où une pauvre âme future mêle les classes de Cookie et fait les recherches Google que je viens de faire, Donc avant d'aller plus loin, je dois savoir: essayez-vous d'agir comme un serveur Web , en livrant des cookies aux clients et en essayant d'obtenir leur retour intact lorsque le client envoie leur prochaine demande, auquel cas je devrais vous montrer comment fonctionne le module "Cookie"? Ou écrivez-vous un client web, pour tester ou pour vous amuser, qui gâche les cookies qu'il envoie avec une requête web à un site web, auquel cas nous devrions parler de "cookielib"?

+0

Wow ... réponse fantastique. –