2015-01-15 11 views
6

Ich habepython-Anfragen - User-Agent außer Kraft gesetzt wird

logindata = { 
     'username': 'me', 
     'password': 'blbla' 
    } 
    payload = {'from':'me', 'lang':'en', 'url':csv_url} 
    headers = { 
     'User-Agent': 'Mozilla/5.0' 
    } 
    api_url = 'http://dev.mypage.com/admin/app/import/' 

    with requests.Session() as s: 
     s.post(api_url, data=json.dumps(logindata), headers=headers) 

     print s.headers 

     # An authorised request. 
     r = s.get(api_url, params=payload, headers=headers) 

ich immer abgelehnt, aber es ist wegen 403 verboten. Und ich druckte die Header, die ich erhalten:

..'User-Agent': 'python-requests/2.2.1 CPython/2.7.5 Windows/7'.. 

Warum ist mein 'User-Agent': 'Mozilla/5.0' außer Kraft gesetzt zu werden? Was fehlt mir hier?

Antwort

7

headerswerden nicht innerhalb Sitzung auf diese Weise gehalten.

Sie müssen entweder explizit jedes Mal übergeben Sie eine Anfrage, oder die s.headers einmal eingestellt:

with requests.Session() as s: 
    s.headers = {'User-Agent': 'Mozilla/5.0'} 

Sie können überprüfen, dass die richtigen Header über Inspektion response.request.headers gesendet wurden:

with requests.Session() as s: 
    s.headers = {'User-Agent': 'Mozilla/5.0'} 

    r = s.post(api_url, data=json.dumps(logindata)) 
    print(r.request.headers) 

Siehe auch, wie die Session class implementiert ist - jedes Mal, wenn Sie eine Anfrage it merges the request.headers with headers haben, die Sie auf das Sitzungsobjekt gesetzt haben:

headers=merge_setting(request.headers, self.headers, dict_class=CaseInsensitiveDict), 
+0

oh ok, didnot wissen, dass – doniyor

+0

so, ich habe '' s.post (url, data = json.dumps (Logindaten), headers = { 'User-Agent': 'Mozilla/5.0'}) ' 'aber immer noch verschiedene Header, wenn ich – doniyor

+0

drucken Sie immer mit guten Nachrichten kommen :) danke – doniyor

2

Wenn Sie die Sitzung wollen alle Anforderungen für bestimmte Header verwenden Sie diese Header auf der Sitzung festlegen müssen, ausdrücklich:

with requests.Session() as s: 
    s.headers.update(headers) 
    s.post(api_url, data=json.dumps(logindata)) 

    # An authorised request. 
    r = s.get(api_url, params=payload) 

Die s.headers.update(headers) Linie fügt Ihr Wörterbuch zu den Session-Header.

Sitzungen nie Informationen von Anfragen kopieren, um für andere Anfragen wiederzuverwenden. Nur Informationen von Antworten (speziell die Cookies) werden zur Wiederverwendung erfasst.

Weitere Einzelheiten finden Sie in der requestsSession Objects documentation:

Sessions können auch Standarddaten an die Anforderungsmethoden verwendet werden, um. Dies geschieht durch Bereitstellung von Daten für die Eigenschaften eines Session-Objekts.

Verwandte Themen