簡體   English   中英

使用URLLIB2的客戶端摘要身份驗證Python不會記住授權標頭信息

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM