私はMechanizeを使用して、非常に厄介なレガシーシステムとのやりとりを自動化しようとしています。特に、最初のログインページの後に、システムからあなたを叩いてしまうすべてのリクエストとともに、認証が送信されなければなりません。残念ながら、Mechanizeは最初に401 Unauthorizedエラーが発生した後にのみ認証を送信することに満足しているようです。毎回認可を送信する方法はありますか?401エラーを最初に得ることなく、Pythonの機械化と認証
は、ここではいくつかのサンプルコードです:
br.add_password("http://example.com/securepage", "USERNAME", "PASSWORD", "/MYREALM")
br.follow_link(link_to_secure_page) # where the url is the previous URL
は、ここで私は、デバッグから取得レスポンスのMechanizeの:
send: 'GET /securepage HTTP/1.1\r\nAccept-Encoding: identity\r\nHost: example.com\r\nReferer: http://example.com/home\r\nConnection: close\r\nUser-Agent: Python-urllib/2.7\r\n\r\n'
reply: 'HTTP/1.1 401 Unauthorized\r\n'
header: Server: Tandy1000Web
header: Date: Thu, 08 Dec 2011 03:08:04 GMT
header: Connection: close
header: Expires: Tue, 01 Jan 1980 06:00:00 GMT
header: Content-Type: text/html; charset=US-ASCII
header: Content-Length: 210
header: WWW-Authenticate: Basic realm="/MYREALM"
header: Cache-control: no-cache
send: 'GET /securepage HTTP/1.1\r\nAccept-Encoding: identity\r\nHost: example.com\r\nReferer: http://example.com/home\r\nConnection: close\r\nAuthorization: Basic VVNFUk5BTUU6UEFTU1dPUkQ=\r\nUser-Agent: Python-urllib/2.7\r\n\r\n'
reply: 'HTTP/1.1 200 OK\r\n'
header: Server: Tandy1000Web
header: Date: Thu, 08 Dec 2011 03:08:07 GMT
header: Connection: close
header: Last-Modified: Thu, 08 Dec 2011 03:08:06 GMT
header: Expires: Tue, 01 Jan 1980 06:00:00 GMT
header: Content-Type: text/html; charset=UTF-8
header: Content-Length: 33333
header: Cache-control: no-cache
問題があることGET
要求付きのモダンなWebアプリケーションで起こるべきことに反し、 401エラーを最初に打つことによって、私は間違ったページを取得します。私はCURLとurllib2を使って、最初のリクエストでauthヘッダーを渡してURLに直接アクセスすると正しいページを取得することを確認しました。
機械語に常にauthヘッダーを送信し、最初の401エラーを回避する方法についてのヒントはありますか?これは、クライアント側で修正する必要があります。私はサーバーを変更することはできません。
あなたはこれを理解しましたか? – ytjohn
ネガティブ。このコメント(2013年7月下旬)の執筆時点で、私はまだ答えを見つけていません。私が答えを見つけたり、他の誰かが答えを出したら、それを受け入れるようにします。 – Pridkett
私は最後に尋ねたので、私はヘッダーを追加することでこれを解決することができました。 – ytjohn