37 python http urllib2 httplib python-requests
我想知道,你如何关闭与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))
Run Code Online (Sandbox Code Playgroud)
提前致谢.
Ole*_*ryb 53
我认为关闭连接的一种更可靠的方法是明确告诉服务器以符合HTTP规范的方式关闭它:
HTTP/1.1定义了"关闭"连接选项,发送方在完成响应后发出连接将被关闭的信号.例如,
Run Code Online (Sandbox Code Playgroud)Connection: close在请求或响应头字段中,表示在当前请求/响应完成后,连接不应被视为"持久"(第8.1节).
的Connection: close标头被添加到实际的请求:
r = requests.post(url=url, data=body, headers={'Connection':'close'})
Run Code Online (Sandbox Code Playgroud)
Fel*_*ung 21
正如这里所讨论的那样,确实没有HTTP连接和httplib所指的东西,因为HTTPConnection实际上是底层的TCP连接,它根本不了解你的请求.请求抽象出来,你永远不会看到它.
事实上,最新版本的Requests确实会在您的请求之后保持TCP连接处于活动状态.如果您确实希望关闭TCP连接,则可以将请求配置为不使用keep-alive.
s = requests.session()
s.config['keep_alive'] = False
Run Code Online (Sandbox Code Playgroud)
stw*_*ite 13
我来到这个问题寻求解决"too many open files" error,但我requests.session()在我的代码中使用.稍后进行一些搜索,我想出了Python请求文档的答案,该文档建议使用该with块,以便即使存在未处理的异常,会话也会关闭:
with requests.Session() as s:
s.get('http://google.com')
Run Code Online (Sandbox Code Playgroud)
如果您没有使用Session,您实际上可以做同样的事情:http://docs.python-requests.org/en/master/api/#requests.Response.close
with requests.get('http://httpbin.org/get', stream=True) as r:
# Do something
Run Code Online (Sandbox Code Playgroud)
Wil*_*hes 11
在请求1.X上,响应对象上的连接可用:
r = requests.post("https://stream.twitter.com/1/statuses/filter.json",
data={'track': toTrack}, auth=('username', 'passwd'))
r.connection.close()
Run Code Online (Sandbox Code Playgroud)
小智 9
请使用response.close()关闭以避免“打开文件过多”错误
例如:
r = requests.post("https://stream.twitter.com/1/statuses/filter.json", data={'track':toTrack}, auth=('username', 'passwd'))
....
r.close()
Run Code Online (Sandbox Code Playgroud)