2015-01-15 46 views
6

蟒蛇,請求 - 用戶代理被重寫

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) 

我被拒,但它是因爲403禁止。並且我打印了標題,得到:

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

爲什麼我的'User-Agent': 'Mozilla/5.0'正在重寫?我在這裏錯過了什麼?

回答

7

headers沒有保存在會議這種方式。

你需要或者每次提出請求時明確地傳遞他們,或設置s.headers一次:

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

您可以檢查出正確的標題是通過檢查response.request.headers發送:

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) 

另請參閱​​如何實現 - 每當您提出請求時it merges the request.headers with headers您已設置會話對象:

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

哦確定,因此未知道 – doniyor 2015-01-15 16:25:16

+0

所以,我做了''s.post(URL,數據= json.dumps(logindata),標題= { '的User-Agent': 'Mozilla的/ 5.0'})' '但仍然得到不同的標題,如果我打印 – doniyor 2015-01-15 16:28:49

+0

你總是帶着好消息:)謝謝 – doniyor 2015-01-15 16:32:59

2

如果你希望會話使用特定的標頭所有您需要設置會話的標題,明確要求:

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) 

s.headers.update(headers)線增加了你的字典會話頭。

會話永遠不會複製請求中的信息以重新用於其他請求。只有來自響應的信息(特別是cookie)才能被重複使用。

有關更多細節,參見requestsSession Objects documentation

會話還可以用來提供默認數據於該請求的方法。這是通過向Session對象上的屬性提供數據來完成的。