72 votes

Python - Demande de fermeture de la connexion http

Je me demandais, comment fermer une connexion avec Requests (python-requests.org) ?

Con httplib c'est HTTPConnection.close() mais comment faire de même avec les demandes ?

Code :

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))

0 votes

Je ne pense pas que Requests établisse une connexion persistante... il n'y a pas de connexion à fermer.

0 votes

@michael, vous obtenez un pool de connexion persistant gratuitement, sauf si vous spécifiez le contraire. docs.python-requests.org/fr/latest/user/advanced/#keep-alive

0 votes

@istruble Alors urllib3 s'occupe du nettoyage du pool de connexion ?

3voto

user1990614 Points 41

Cela fonctionne pour moi :

res = requests.get(<url>, timeout=10).content
requests.session().close()

3voto

user1995868 Points 215

Sur la base des dernières requêtes (2.25.1), les requests.<method> fermera la connexion par défaut

with sessions.Session() as session:
    return session.request(method=method, url=url, **kwargs)

https://github.com/psf/requests/blob/master/requests/api.py#L60

Ainsi, si vous utilisez la dernière version des requêtes, il semble que nous n'ayons pas besoin de fermer la connexion par nous-mêmes.

De même, si vous devez envoyer plusieurs fois des requêtes avec la même session, il est préférable d'utiliser la fonction requests.Session() au lieu d'ouvrir/fermer la connexion plusieurs fois. EX :

with requests.Session() as s:
    r = s.get('https://example.org/1/')
    print(r.text)
    r = s.get('https://example.org/2/')
    print(r.text)
    r = s.get('https://example.org/3/')
    print(r.text)

0voto

allergique Points 73

Pour supprimer l'en-tête "keep-alive" dans les demandes, je l'ai simplement créé à partir de l'objet Request, puis je l'ai envoyé avec Session

headers = {
'Host' : '1.2.3.4',
'User-Agent' : 'Test client (x86_64-pc-linux-gnu 7.16.3)',
'Accept' : '*/*',
'Accept-Encoding' : 'deflate, gzip',
'Accept-Language' : 'it_IT'
}

url = "https://stream.twitter.com/1/statuses/filter.json"
#r = requests.get(url, headers = headers) #this triggers keep-alive: True
s = requests.Session()
r = requests.Request('GET', url, headers)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X