2012-01-13 10 views
6

Ho un problema durante il tentativo di salvare i cookie in un file utilizzando il metodo save . Qui è il mio codice:Python FileCookieJar.save() problema

#!/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 

Così riesce a sollevare self.cj.save(self.cookiefile, ignore_discard=True)NotImplementedError eccezione, che è secondo la documentazione. Ma la mia domanda come faccio a salvare i cookie sul file allora? Ho anche provato a includere il codice nella clausola try ma questo non è stato di alcun aiuto.

risposta

8

La base FileCookieJar non implementa .save Per ottenere il risparmio, è necessario utilizzare una delle sottoclassi come MozillaCookieJar o LWPCookieJar.

6

devo scrivere codice di esempio per demo: manico biscotti

  • auto: cookie nel memory
  • cookie maniglia auto: cookie nel file
    • supportano due formati:
      • LWP
      • Mozilla
    • due tipi di funzionamento
      • save into file
      • load from file

codice:



    #!/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

Per Python 3 che è 'Cookiejar = http.cookiejar. cooki eJar(); opener = urllib.request.build_opener (urllib.request.HTTPCookieProcessor (cookiejar)) ' – user