Я пытаюсь использовать Python для написания клиента, который подключается к пользовательскому http-серверу, использующему дайджест-проверку подлинности. Я могу подключиться и вытащить первый запрос без проблем. Используя TCPDUMP (я нахожусь на MAC OS X - я и MAC, и нуб Python), я вижу, что первый запрос - это фактически два http-запроса, как и следовало ожидать, если вы знакомы с RFC2617. Первые результаты в 401 НЕСАНКЦИОНИРОВАНЫ. Информация заголовка, отправленная обратно с сервера, правильно используется для генерации заголовков для второго запроса с некоторыми настраиваемыми значениями заголовка авторизации, что дает ответ 200 OK и полезную нагрузку.
Все отлично. Мой механизм открытия HTTPDigestAuthHandler работает благодаря urllib2.
В той же программе я пытаюсь запросить вторую, другую страницу с того же сервера. Согласно RFC, я ожидаю, что на этот раз TCPDUMP покажет только один запрос, используя почти все ту же информацию заголовка авторизации (nc должен увеличиваться).
Вместо этого он начинается с нуля, сначала получает 401 и восстанавливает информацию, необходимую для 200.
Возможно ли при использовании urllib2 последующие запросы с дайджест-проверкой подлинности перезаписывать известные значения заголовка авторизации и выполнять только один запрос?
[Перечитайте это пару раз, пока это не станет понятным, я не уверен, как сделать это более понятным]
Google дал удивительно мало, так что я думаю, что нет. Я посмотрел на код для urllib2.py и его очень грязный (комментарии вроде: «Это не невероятное усилие»), поэтому я не был бы шокирован, если бы это было ошибкой. Я заметил, что мой заголовок подключения закрыт, и даже если я установил для него keepalive, он перезаписывается. Это привело меня к keepalive.py, но у меня это тоже не сработало.
Пикурл тоже не будет работать.
Я могу передать код всего взаимодействия, но я бы хотел по возможности вернуться к существующим библиотекам.
Таким образом, возможно ли с помощью urllib2 и дайджест-аутентификации получить 2 страницы с одного и того же сервера, выполнив только 3 http-запроса (2 для первой страницы, 1 для второй).
Если вы уже пробовали это раньше и уже знаете, что это невозможно, пожалуйста, дайте мне знать. Если у вас есть альтернатива, я весь в ушах.
Заранее спасибо.