web-dev-qa-db-ja.com

Python-Requests(> = 1. *):キープアライブを無効にする方法は?

Requestsモジュールを使用して単純なWebクローラーをプログラムしようとしていますが、その-default-keep-alive機能を無効にする方法を知りたいです。

私は使ってみました:

s = requests.session()
s.config['keep_alive'] = False

ただし、セッションオブジェクトに属性「config」がないというエラーが表示されます。新しいバージョンで変更されたと思いますが、公式ドキュメントでその方法を見つけることができないようです。

実は、特定のWebサイトでクローラーを実行すると、最大5ページしか取得できず、無限にループし続けるので、キープアライブ機能と関係があると思いました。

PS:リクエストはWebクローラーに適したモジュールですか?もっと適応したものはありますか?

ありがとうございました !

15
Acemad

これは動作します

s = requests.session()
s.keep_alive = False

同様の質問のコメントで回答されました。

15
nfazzio

よくわかりませんが、リクエストを使用してGETリクエストを送信するときに、HTTPヘッダーとして{"Connection": "close"}を渡してみてください。これにより、サーバーが応答を返すとすぐに接続が閉じられます。

>>> headers = {"Connection": "close"}
>>> r = requests.get('https://example.xcom', headers=headers)
6
praveen

@praveenが示唆したように、HTTP/1.1ヘッダーConnection: closeを使用して、応答の完了後に接続を閉じる必要があることをサーバーに通知することが期待されています。

これが RFC 2616 でどのように記述されているかです:

HTTP/1.1は、応答の完了後に接続が閉じられることを送信者が通知するための「閉じる」接続オプションを定義します。例えば、

Connection: close

要求または応答ヘッダーフィールドのいずれかで、現在の要求/応答が完了した後、接続が「永続的」(セクション8.1)と見なされるべきではないことを示します。

持続的接続をサポートしないHTTP/1.1アプリケーションは、すべてのメッセージに「閉じる」接続オプションを含める必要があります。

4
Ilya Khadykin