2014-11-04 60 views
4

我想在Python中使用基本身份驗證的Python:要求基本身份驗證不起作用

auth = requests.post('http://' + hostname, auth=HTTPBasicAuth(user, password)) 
request = requests.get('http://' + hostname + '/rest/applications') 

響應形式AUTH變量:

<<class 'requests.cookies.RequestsCookieJar'>[<Cookie JSESSIONID=cb10906c6219c07f887dff5312fb for appdynamics/controller>]> 
200 
CaseInsensitiveDict({'content-encoding': 'gzip', 'x-powered-by': 'JSP/2.2', 'transfer-encoding': 'chunked', 'set-cookie': 'JSESSIONID=cb10906c6219c07f887dff5312fb; Path=/controller; HttpOnly', 'expires': 'Wed, 05 Nov 2014 19:03:37 GMT', 'server': 'nginx/1.1.19', 'connection': 'keep-alive', 'pragma': 'no-cache', 'cache-control': 'max-age=78000', 'date': 'Tue, 04 Nov 2014 21:23:37 GMT', 'content-type': 'text/html;charset=ISO-8859-1'}) 

但是,當我試圖讓來自不同位置的數據 - 我得到401錯誤

<<class 'requests.cookies.RequestsCookieJar'>[]> 
401 
CaseInsensitiveDict({'content-length': '1073', 'x-powered-by': 'Servlet/3.0 JSP/2.2 (GlassFish Server Open Source Edition 3.1.2.2 Java/Oracle Corporation/1.7)', 'expires': 'Thu, 01 Jan 1970 00:00:00 UTC', 'server': 'nginx/1.1.19', 'connection': 'keep-alive', 'pragma': 'No-cache', 'cache-control': 'no-cache', 'date': 'Tue, 04 Nov 2014 21:23:37 GMT', 'content-type': 'text/html', 'www-authenticate': 'Basic realm="controller_realm"'}) 

只要我和erstand - 在第二個請求中不會替換會話參數。

+0

您需要包括代碼,使第二個請求 – Claris 2014-11-04 21:37:57

+0

我不知道該怎麼做,我不能找到一個合適的手動 – oleksii 2014-11-04 21:43:20

+0

我的意思是,你需要爲第二個請求包含*您的*代碼。通過第二次請求,你是指「獲取」請求? – Claris 2014-11-04 21:47:31

回答

9

您需要使用session object和發送認證每個請求。會議還將跟蹤的cookie爲您提供:

session = requests.Session() 
session.auth = (user, password) 

auth = session.post('http://' + hostname) 
response = session.get('http://' + hostname + '/rest/applications') 
+1

感謝您的回覆,但它不起作用:( 錯誤與之前的 – oleksii 2014-11-05 00:01:53

+0

相同@oleksii:define'does not work'。而當您使用POST(無參數,我注意到)時,服務器返回任何令牌或任何你需要用於REST API的東西?換句話說,你需要做什麼* API文檔*你需要做什麼? – 2014-11-05 08:38:31

+0

官方文檔需要更新 – Sarit 2018-01-08 08:20:45

2

example看起來有點不同於你的代碼。

>>> from requests.auth import HTTPBasicAuth 
>>> requests.get('https://api.github.com/user', auth=HTTPBasicAuth('user', 'pass')) 
<Response [200]> 
+1

我已經閱讀過本手冊,但它不起作用 – oleksii 2014-11-05 00:04:32

+0

同樣的文檔也說使用'HTTPBasicAuth'對象是* optional *;傳遞一個用戶名和密碼元組* *完全相同的東西*,因爲它是常見的基本情況。 – 2018-01-08 08:41:10