как запросить URL аутентификации только один раз, а не дважды, с помощью библиотеки pyll's urllib2 - PullRequest
4 голосов
/ 06 апреля 2011

обычно мы запрашиваем URL-адрес для аутентификации с библиотекой python urllib2, как описано в этой странице , но это вызовет 2 запроса на сервер, первый ответ с ошибкой 401, а затем во-вторых, клиент кодирует имя пользователя / пароль в заголовок аутентификации и снова запрашивает. Но, если вы знаете сферу и (имя пользователя, пароль), вы можете получить прямой доступ к URL только один раз. Я могу сделать это путем кодирования информации аутентификации в заголовок запроса, и он запрашивает только один раз, но я не могу сделать это с HTTPPasswordMgrWithDefaultRealm и связанным классом.

  • только один раз код запроса:

    import urllib2, base64
    url = 'http://xxxx'
    username = 'jpx'
    passwd = 'jpx123'
    b64str = base64.encodestring('%s:%s' % (username, passwd))
    
    req = urllib2.Request(url)
    auth = 'Basic %s' % b64str
    req.add_header('Authorization', auth)
    
    try:
        opener = urllib2.urlopen(req)
    except IOError, e:
        print str(e)
    
    print opener.read()
    

1 Ответ

1 голос
/ 06 апреля 2011

Да, так работает менеджер паролей из urllib.Он отправляет информацию об авторизации только после получения 401 с сервера.Вы можете создать подклассы множества вещей и изменить это поведение, но, кажется, проще просто кодировать информацию в заголовок, как вы это делали в примере.

...