2016-07-02 17 views
0

Ich habe eine Frage über Python-Anfragen-Modul. Gemäß der DokumentationKeep-Alive in Python-Anfragen Modul

dank urllib3, keep-alive ist 100% automatisch innerhalb einer Sitzung! Alle Anfragen, die Sie innerhalb einer Sitzung stellen, werden die entsprechende Verbindung automatisch wiederverwenden!

Mein Beispielcode sieht wie folgt aus:

def make_double_get_request(): 
    response = requests.get(url=API_URL, headers=headers, timeout=10) 
    print response.text 
    response = requests.get(url=API_URL, headers=headers, timeout=10) 
    print response.text 

Aber das Protokoll ich erzählt bekommen, dass mit jeder Frage eine neue HTTP-Verbindung starten wird:

INFO:requests.packages.urllib3.connectionpool:Starting new HTTP connection (1): url 
DEBUG:requests.packages.urllib3.connectionpool:"GET url HTTP/1.1" 200 None 
response text goes here 
INFO:requests.packages.urllib3.connectionpool:Starting new HTTP connection (1): url 
DEBUG:requests.packages.urllib3.connectionpool:"GET url HTTP/1.1" 200 None 
response text goes here 

Bin ich etwas falsch? Wenn man sich die Pakete mit Wireshark anschaut, sieht es so aus, als hätten sie Keep-Alive gesetzt.

Antwort

2

Verwenden a Session() instance:

def make_double_get_request(): 
    session = requests.Session() 
    response = session.get(url=API_URL, headers=headers, timeout=10) 
    print response.text 
    response = session.get(url=API_URL, headers=headers, timeout=10) 
    print response.text 

requests Die Top-Level-HTTP-Methode Funktionen sind eine Funktion, die ein neues API Session Objekt jedes Mal erzeugt, die Wiederverwendung von Verbindungen verhindert wird.

Aus der Dokumentation:

Das Session-Objekt können Sie bestimmte Parameter über Anfragen bestehen. Es behält auch Cookies für alle Anforderungen bei, die von der Sitzungsinstanz gestellt wurden, und verwendet das Verbindungs-Pooling urllib3.

Verwandte Themen