Почему мой основной обработчик аутентификации не работает? - PullRequest
0 голосов
/ 04 июля 2018

Я хочу очистить страницу, которая находится за базовым http-аутентификацией. Я могу использовать wget http://user:pass@example.com/path/to/the_thing просто отлично. Но если я попытаюсь получить к нему доступ через urllib2, он не авторизуется.

Я прочитал документацию , а также Python urllib2 HTTPBasicAuthHandler и похоже, что это должно работать, но я получаю HTTP Error 401: Unauthorized. Так что это не работает.

import urllib2
from bs4 import BeautifulSoup

very_beginning = "http://www.example.com/mm/path/to/the_thing"
my_user = "user"
my_passwd = "hella_secret"


auth_handler = urllib2.HTTPBasicAuthHandler()
auth_handler.add_password(
                realm="clinty",
                uri="http://example.com/mm/",
                user=my_user,
                passwd=my_passwd
                )
auth_opener = urllib2.build_opener(auth_handler)
urllib2.install_opener(auth_opener)

try:
    soup = BeautifulSoup(urllib2.urlopen(very_beginning))
    # return soup
except Exception as error:
    print(error)

Я не совсем уверен, что я здесь делаю неправильно.

1 Ответ

0 голосов
/ 04 июля 2018

Требуются дополнительные сведения, чтобы узнать, что происходит, но вот другой синтаксис, который вы можете попробовать:

password_mgr = urllib2.HTTPPasswordMgrWithDefaultRealm()
top_level_url = "http://example.com/foo/"
password_mgr.add_password(None, top_level_url, my_user, my_passwd)
handler = urllib2.HTTPBasicAuthHandler(password_mgr)

оттуда вы можете подтвердить, что он работает с:

auth_opener = urllib2.build_opener(handler)
urllib2.install_opener(auth_opener)

try:
    soup = BeautifulSoup(urllib2.urlopen(very_beginning))
    print("success")
except Exception as error:
    print(error)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...