How to save requests (python) cookies to a file?

前端 未结 10 1686
渐次进展
渐次进展 2020-11-30 17:35

How to use the library requests (in python) after a request

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import requests
bot = requests.session         


        
10条回答
  •  攒了一身酷
    2020-11-30 17:54

    After a call such as r = requests.get(), r.cookies will return a RequestsCookieJar which you can directly pickle, i.e.

    import pickle
    def save_cookies(requests_cookiejar, filename):
        with open(filename, 'wb') as f:
            pickle.dump(requests_cookiejar, f)
    
    def load_cookies(filename):
        with open(filename, 'rb') as f:
            return pickle.load(f)
    
    #save cookies
    r = requests.get(url)
    save_cookies(r.cookies, filename)
    
    #load cookies and do a request
    requests.get(url, cookies=load_cookies(filename))
    

    If you want to save your cookies in human-readable format, you have to do some work to extract the RequestsCookieJar to a LWPCookieJar.

    import cookielib
    def save_cookies_lwp(cookiejar, filename):
        lwp_cookiejar = cookielib.LWPCookieJar()
        for c in cookiejar:
            args = dict(vars(c).items())
            args['rest'] = args['_rest']
            del args['_rest']
            c = cookielib.Cookie(**args)
            lwp_cookiejar.set_cookie(c)
        lwp_cookiejar.save(filename, ignore_discard=True)
    
    def load_cookies_from_lwp(filename):
        lwp_cookiejar = cookielib.LWPCookieJar()
        lwp_cookiejar.load(filename, ignore_discard=True)
        return lwp_cookiejar
    
    #save human-readable
    r = requests.get(url)
    save_cookies_lwp(r.cookies, filename)
    
    #you can pass a LWPCookieJar directly to requests
    requests.get(url, cookies=load_cookies_from_lwp(filename))
    

提交回复
热议问题