64

Requests (python-requests.org) との接続をどのように閉じるのですか?

httplibですHTTPConnection.close()が、リクエストで同じことを行うにはどうすればよいですか?

コード:

r = requests.post("https://stream.twitter.com/1/statuses/filter.json", data={'track':toTrack}, auth=('username', 'passwd'))
for line in r.iter_lines():
    if line:
        self.mongo['db'].tweets.insert(json.loads(line))
4

8 に答える 8

72

接続を閉じるより信頼性の高い方法は、HTTP 仕様に準拠した方法で接続を閉じるようにサーバーに明示的に指示することだと思います。

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

   Connection: close

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

Connection: closeヘッダーは実際のリクエストに追加されます。

r = requests.post(url=url, data=body, headers={'Connection':'close'})
于 2013-03-19T22:37:27.020 に答える
30

hereで説明されているように、実際には HTTP 接続のようなものは存在せず、httplib が HTTPConnection として参照するものは、実際にはリクエストについてあまり知らない基礎となる TCP 接続です。アブストラクトをリクエストすると、それが表示されることはありません。

Requests の最新バージョンは、実際には、リクエスト後に TCP 接続を維持します。TCP 接続を閉じたい場合は、keep-aliveを使用しないようにリクエストを構成できます。

s = requests.session()
s.config['keep_alive'] = False
于 2012-04-11T23:47:07.100 に答える