Я пытаюсь использовать Mechanize для автоматизации взаимодействий с очень требовательной унаследованной системой. В частности, после первой страницы входа авторизация должна отправляться при каждом запросе, который выводит вас из системы. К сожалению, Mechanize, кажется, довольствуется только отправкой авторизации после первого получения 401 несанкционированной ошибки. Есть ли способ заставить его отправлять авторизацию каждый раз?
Вот пример кода:
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
, при первой ошибке 401 я получаю не ту страницу. С помощью CURL и urllib2 я подтвердил, что если я нажму URL-адрес напрямую, передав заголовок auth при первом запросе, я получу правильную страницу.
Есть ли какие-либо советы о том, как заставить механизм механизировать всегда отправлять заголовки аутентификации и избегать первой ошибки 401? Это должно быть исправлено на стороне клиента. Я не могу изменить сервер.