62

リクエスト後にライブラリを使用する方法requests(Pythonで)

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import requests
bot = requests.session()
bot.get('http://google.com')

すべてのCookieをファイルに保持してから、ファイルからCookieを復元します。

4

11 に答える 11

89

これをすぐに行う方法はありませんが、難しくはありません。

CookieJarを使用してセッションからオブジェクトを取得しsession.cookies、 を使用pickleしてそれをファイルに保存できます。

完全な例:

import requests, pickle
session = requests.session()
# Make some calls
with open('somefile', 'wb') as f:
    pickle.dump(session.cookies, f)

ロードは次のとおりです。

session = requests.session()  # or an existing session

with open('somefile', 'rb') as f:
    session.cookies.update(pickle.load(f))

requestsライブラリはrequests.cookies.RequestsCookieJar()サブクラスを使用します。これは明示的にピッキングと dict のような API をサポートします。このRequestsCookieJar.update()メソッドを使用して、pickle ファイルから読み込まれた Cookie で既存のセッション Cookie jar を更新できます。

于 2012-10-23T13:33:01.400 に答える
24

@miracle2k の回答を拡張すると、 requestsSessionは任意のcookielibで動作するように文書化されています。(および) は、Cookie をファイルに保存したり、ファイルから読み込んだりできます。これは、リクエスト セッションの Cookie を保存およびロードする完全なコード スニペットです。パラメータは、テストのために httpbin を操作するために使用されますが、実際のコードには含めたくない場合があります。 CookieJarLWPCookieJarMozillaCookieJarignore_discard

import os
from cookielib import LWPCookieJar

import requests


s = requests.Session()
s.cookies = LWPCookieJar('cookiejar')
if not os.path.exists('cookiejar'):
    # Create a new cookies file and set our Session's cookies
    print('setting cookies')
    s.cookies.save()
    r = s.get('http://httpbin.org/cookies/set?k1=v1&k2=v2')
else:
    # Load saved cookies from the file and use them in a request
    print('loading saved cookies')
    s.cookies.load(ignore_discard=True)
    r = s.get('http://httpbin.org/cookies')
print(r.text)
# Save the session's cookies back to the file
s.cookies.save(ignore_discard=True)
于 2014-09-15T23:50:49.380 に答える
4

Python 3 のコード

インターネット上の Cookie の大部分は Netscape Cookie であることに注意してください。そのため、Cookie を Mozilla cookies.txt ファイル形式 (Lynx および Netscape ブラウザーでも使用される) でディスクに保存する場合は、MozillaCookieJar を使用します。

from http.cookiejar import MozillaCookieJar
import requests

s = requests.Session()
s.cookies = MozillaCookieJar('cookies.txt')
# or s.cookies = MozillaCookieJar() and later use s.cookies.filename = 'cookies.txt' or pass the file name to save method.

response = s.get('https://www.msn.com')

s.cookies.save()

ファイルが既に存在する場合は上書きされるため、ファイルに含まれるすべての Cookie が消去されます。保存された Cookie は後で load() または revert() メソッドを使用して復元できます。

真の ignore_discard 引数を渡して別の方法で要求しない限り、save() メソッドはセッション Cookie を保存しないことに注意してください。

s.cookies.save(ignore_discard=True)

ロード方法を使用:

ファイルから Cookie を読み込みます。

新しく読み込まれた Cookie によって上書きされない限り、古い Cookie は保持されます。

s.cookies.load()

元に戻す方法を使用:

すべての Cookie を消去し、保存したファイルから Cookie を再読み込みします。

s.cookies.revert()

load または revert メソッドで真の ignore_discard 引数を渡す必要がある場合もあります。

MozillaCookieJar の使用に関する注意:

注 これにより、RFC 2965 Cookie に関する情報が失われ、ポートなどの新しいまたは非標準の Cookie 属性に関する情報も失われます。

もっと読む

于 2019-02-25T20:07:19.907 に答える