2012-01-13 10 views
6

Mam problem podczas próby zapisania plików cookie w pliku przy użyciu metody FileCookieJar 's save. Tu jest mój kodu:Python FileCookieJar.save() problem

#!/usr/bin/python 
import httplib, cookielib, urllib2, json, time 
from datetime import date 


class FoN: 
    def __init__(self): 
      self.cookiefile = "cookies.txt" 
      self.cj = cookielib.FileCookieJar(self.cookiefile) 
    def login (self, login, password): 
      js = json.JSONEncoder().encode({"login":login,"password":password}) 
      req=urllib2.Request("http://www.example.com/user/login", js) 
      res=urllib2.urlopen(req) 
      self.cj.extract_cookies(res,req) 
      self.cj.save(self.cookiefile, ignore_discard=True) 
      f.write ("Login: "+login+", result: "+str(res.read().count("true"))+"\n") 
      time.sleep(2) 
      return res 

Więc to nie na self.cj.save(self.cookiefile, ignore_discard=True) podnoszenie NotImplementedError wyjątek, który jest zgodnie z dokumentacją. Ale moje pytanie, w jaki sposób zapisać pliki cookie do pliku? Próbowałem nawet dołączyć kod do klauzuli try, ale to wcale nie pomogło.

Odpowiedz

8

Podstawa FileCookieJar nie implementuje .save Aby uzyskać oszczędności, należy skorzystać z jednej z podklas, takich jak MozillaCookieJar lub LWPCookieJar.

6

muszę napisać przykładowy kod demo:

  • auto uchwyt ciasteczka cookie w memory
  • auto uchwyt ciasteczka cookie w file
    • obsługują dwa format:
      • LWP
      • Mozilla
    • dwa rodzaje działania
      • save into file
      • load from file

Kod:



    #!/usr/bin/python 
    # -*- coding: utf-8 -*- 
    """ 
    Function: 【整理】Python中Cookie的处理:自动处理Cookie,保存为Cookie文件,从文件载入Cookie 
       http://www.crifan.com/python_auto_handle_cookie_and_save_to_from_cookie_file 

    Version: 2013-01-15 
    Author:  Crifan 
    Contact: admin (at) crifan.com 
    """ 

    import os; 
    import cookielib; 
    import urllib2; 

    def pythonAutoHandleCookie(): 
     """ 
      Demo how to auto handle cookie in Python 
       cookies in memory 
       cookies in file: 
        save cookie to file 
         LWP  format 
         Mozilla format 
        load cookie from file 
     """ 

     print "1. Demo how to auto handle cookie (in memory)"; 
     cookieJarInMemory = cookielib.CookieJar(); 
     opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cookieJarInMemory)); 
     urllib2.install_opener(opener); 
     print "after init, cookieJarInMemory=",cookieJarInMemory; #after init, cookieJarInMemory= 
     #!!! following urllib2 will auto handle cookies 
     demoUrl = "http://www.google.com/"; 
     response = urllib2.urlopen(demoUrl); 
     #here, we already got response cookies 
     print "after urllib2.urlopen, cookieJarInMemory=",cookieJarInMemory; 
     #after urllib2.urlopen, cookieJarInMemory= , , ]> 


     print "2. Demo how to auto handle cookie in file, LWP format"; 
     cookieFilenameLWP = "localCookiesLWP.txt"; 
     cookieJarFileLWP = cookielib.LWPCookieJar(cookieFilenameLWP); 
     #will create (and save to) new cookie file 
     cookieJarFileLWP.save(); 
     opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cookieJarFileLWP)); 
     urllib2.install_opener(opener); 
     #!!! following urllib2 will auto handle cookies 
     demoUrl = "http://www.google.com/"; 
     response = urllib2.urlopen(demoUrl); 
     #update cookies, save cookies into file 
     cookieJarFileLWP.save(); 
     #for demo, print cookies in file 
     print "LWP cookies:"; 
     print open(cookieFilenameLWP).read(os.path.getsize(cookieFilenameLWP)); 
     # #LWP-Cookies-2.0 
     # Set-Cookie3: PREF="ID=34c1415b570a93ae:FF=0:NW=1:TM=1358236121:LM=1358236121:S=gEVVojW4x37ht5n-"; path="/"; domain=".google.com"; path_spec; domain_dot; expires="2015-01-15 07:48:41Z"; version=0 
     # Set-Cookie3: NID="67=JI_uEwUm5GDrQ_vCwAp2z_YGU7MdLm5CLMa4CNLF7RQuTDMzrrk1EjRddGcnpoFbht81LaV9spxZQQInf0mPS6lDrvcRqBBL5NOTmy8SwOzA6HWC3iTIo4-o3fO1Udkv"; path="/"; domain=".google.com.hk"; path_spec; domain_dot; expires="2013-07-17 07:48:41Z"; HttpOnly=None; version=0 
     # Set-Cookie3: PREF="ID=8f7e4efca89bdb1b:U=f85a4afa4db021aa:FF=2:LD=zh-CN:NW=1:TM=1358236121:LM=1358236121:S=2WR59hDWutdnUJtF"; path="/"; domain=".google.com.hk"; path_spec; domain_dot; expires="2015-01-15 07:48:41Z"; version=0 

     print "3. Demo how to auto handle cookie in file, Mozilla Format"; 
     cookieFilenameMozilla = "localCookiesMozilla.txt"; 
     cookieJarFileMozilla = cookielib.MozillaCookieJar(cookieFilenameMozilla); 
     #will create (and save to) new cookie file 
     cookieJarFileMozilla.save(); 
     opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cookieJarFileMozilla)); 
     urllib2.install_opener(opener); 
     #!!! following urllib2 will auto handle cookies 
     demoUrl = "http://www.google.com/"; 
     response = urllib2.urlopen(demoUrl); 
     #update cookies, save cookies into file 
     cookieJarFileMozilla.save(); 
     #for demo, print cookies in file 
     print "Mozilla cookies:"; 
     print open(cookieFilenameMozilla).read(os.path.getsize(cookieFilenameMozilla)); 
     # # Netscape HTTP Cookie File 
     # # http://www.netscape.com/newsref/std/cookie_spec.html 
     # # This is a generated file! Do not edit. 

     # .google.com TRUE / FALSE 1421308121 PREF ID=0e05040dd979207c:FF=0:NW=1:TM=1358236121:LM=1358236121:S=jcFid2XgXMIhPUPl 
     # .google.com.hk TRUE / FALSE 1374047321 NID 67=klMI_Z5ZPWDjUYrWSUHIE_kYI77_ziJaL0kWRoUGThagME86LKY7H-MNa2wAMI_GklIwYcD8t82qPinxzLd4GLDbmWT0OVLCXhRj0wQDC57dTNAsTs4lhVR7Yjvj2tfn 
     # .google.com.hk TRUE / FALSE 1421308121 PREF ID=028f8b736db06a9a:U=6ba6d080847c8de6:FF=2:LD=zh-CN:NW=1:TM=1358236121:LM=1358236121:S=_1BcC5v3G0ZojVz8 

     print "4. read cookies from file"; 
     parseAndSavedCookieFile = "parsedAndSavedCookies.txt" 
     parsedCookieJarFile = cookielib.MozillaCookieJar(parseAndSavedCookieFile); 
     #parsedCookieJarFile = cookielib.MozillaCookieJar(cookieFilenameMozilla); 
     print parsedCookieJarFile; # 
     parsedCookieJarFile.load(cookieFilenameMozilla); 
     print parsedCookieJarFile; #, , ]> 


    if __name__=="__main__": 
     pythonAutoHandleCookie(); 

+0

Pythona 3 jest 'cookiejar = http.cookiejar. Cooki eJar(); opener = urllib.request.build_opener (urllib.request.HTTPCookieProcessor (cookiejar)) ' – user