2015-10-07 15 views
6

有时我看到人们使用requests.Session对象调用Web API:使用requests.get()和requests.session()。get()之间的区别?

client = requests.session() 
resp = client.get(url='...') 

但有时他们不这样做:

resp = requests.get(url='...') 

有人可以解释我们什么时候应该使用Session,当我们不需要他们吗?

+1

您的*第一站*应该是[库文档](http://docs.python-requests.org/en/latest/user/advanced/#session-objects)。 –

回答

9

在引擎盖下,requests.get()为每个请求创建了一个新的Session对象。

通过预先创建会话对象,您将获得重用会话;例如,这可让您保留Cookie,并允许您重新使用设置以用于所有连接,例如标题和查询参数。最重要的是,会话让您利用连接池;重用连接到同一主机。

Sessions documentation

Session对象允许您坚持跨请求某些参数。它还会在Session实例所做的所有请求中保持cookie,并使用urllib3的连接池。因此,如果您向同一主机发出多个请求,则会重新使用基础TCP连接,这可能会导致性能显着提高(请参阅HTTP persistent connection)。

+0

因此,如果我的HTTP请求是一次性任务,这两种方法之间没有区别,对吧? –

+1

@FredPym:正好。只要你多次连接到同一台主机,重用会话是一个好主意。 –

0

引述documentation

Session对象允许您坚持跨请求某些参数。它还在Session实例的所有请求中保持cookie。