[英]Client Digest Authentication Python with URLLIB2 will not remember Authorization Header Information
我正在嘗試使用Python編寫一個客戶端,該客戶端連接到使用摘要身份驗證的自定義http服務器。 我可以毫無問題地連接並拉出第一個請求。 使用TCPDUMP(我在MAC OS X上—我既是MAC又是Python noob),我可以看到第一個請求實際上是兩個http請求,就像您熟悉RFC2617一樣。 401 UNAUTHORIZED中的第一個結果。 從服務器發回的標頭信息已正確用於生成第二個請求的標頭,該請求具有一些自定義的Authorization標頭值,從而產生200 OK響應和有效負載。
一切都很棒。 感謝urllib2,我的HTTPDigestAuthHandler開瓶器正在工作。
在同一程序中,我嘗試從同一服務器請求另一個不同的頁面。 我希望根據RFC,這次TCPDUMP將使用幾乎所有相同的授權標頭信息(nc應該增加)僅顯示一個請求。
而是從頭開始,首先獲取401,然后重新生成200所需的信息。
urllib2是否可以使具有摘要身份驗證的后續請求回收已知的Authorization Header值,並且僅執行一個請求?
[重新閱讀幾次直到有意義為止,我不確定如何使它變得更加簡單]
Google的收益令人驚訝地少,所以我想沒有。 我查看了urllib2.py的代碼,它的確很亂(注釋:“這不是一個很棒的嘗試”),所以如果這是一個bug,我不會感到震驚。 我注意到我的連接頭已關閉,即使將其設置為keepalive,它也會被覆蓋。 這導致我進入keepalive.py,但對我也不起作用。
Pycurl也不起作用。
我可以編寫整個交互的代碼,但我想盡可能地使用現有的庫。
總之,使用urllib2和摘要身份驗證可以從同一服務器獲取2個頁面,而只執行3個http請求(第一個頁面2個,第二個頁面1個)。
如果您碰巧曾經嘗試過此方法,並且已經知道不可能,請告訴我。 如果您有其他選擇,我會全力以赴。
提前致謝。
盡管無法立即使用,但urllib2
足夠靈活以自己添加。 子類化HTTPDigestAuthHandler
,對其進行破解(我認為是retry_http_digest_auth
方法)以記住身份驗證信息,並定義一個http_request(self, request)
方法以將其用於所有后續請求(添加WWW-Authenticate標頭)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.