Вопрос по python, https – HTTPS войти с помощью urllib2

5

В настоящее время у меня есть небольшой скрипт, который загружает веб-страницу и извлекает некоторые данные, которые мне интересны. Ничего особенного.

В настоящее время я загружаю страницу примерно так:

<code>import commands
command = 'wget --output-document=- --quiet --http-user=USER --http-password=PASSWORD https://www.example.ca/page.aspx'
status, text = commands.getstatusoutput(command)
</code>

Хотя это работает отлично, я подумал, что имеет смысл удалить зависимость от wget. Я думал, что было бы тривиально преобразовать вышеупомянутое в urllib2, но до сих пор я имел нулевой успех. В Интернете полно примеров urllib2, но я не нашел ничего, что соответствовало бы моей потребности в простой аутентификации по имени пользователя и паролю HTTP с сервером HTTPS.

Ваш Ответ

3   ответа
1

Запросы Модуль предоставляет современный API для HTTP / HTTPS возможностей.


url = 'https://www.someserver.com/toplevelurl/somepage.htm'

res = requests.get(url, auth=('USER', 'PASSWORD'))

status = res.status_code
text   = res.text
Хотя я бы предпочел что-то в стандартных библиотеках, это похоже на очевидный путь. Parker Coates
6

этот говорит, это должно быть прямо

[as] long as your local Python has SSL support.

Если вы используете только простую аутентификацию HTTP, вы должны установить другой обработчик, как описаноВот.

Приведу пример:

import urllib2

theurl = 'http://www.someserver.com/toplevelurl/somepage.htm'
username = 'johnny'
password = 'XXXXXX'
# a great password

passman = urllib2.HTTPPasswordMgrWithDefaultRealm()
# this creates a password manager
passman.add_password(None, theurl, username, password)
# because we have put None at the start it will always
# use this username/password combination for  urls
# for which `theurl` is a super-url

authhandler = urllib2.HTTPBasicAuthHandler(passman)
# create the AuthHandler

opener = urllib2.build_opener(authhandler)

urllib2.install_opener(opener)
# All calls to urllib2.urlopen will now use our handler
# Make sure not to include the protocol in with the URL, or
# HTTPPasswordMgrWithDefaultRealm will be very confused.
# You must (of course) use it when fetching the page though.

pagehandle = urllib2.urlopen(theurl)
# authentication is now handled automatically for us

Если вы выполняете дайджест, вам нужно будет установить некоторые дополнительные заголовки, но они будут одинаковыми, независимо от использования SSL.Google для python + urllib2 + http + digest.

Ура,

На сервере разрешен доступ без аутентификации, единственный способ аутентификации с помощью urllib2 - это создать заголовок вручную:stackoverflow.com/questions/2407126/…
Только что проверил: работает для меня.
Ооо Похоже, вам придется проделать дополнительную работу в urllib2:docs.python.org/howto/urllib2.html По сути, urllib2 выполняет базовую аутентификацию также через заголовки. Сожалею.
Я пробовал как с HTTPBasicAuthHandler, так и с HTTPDigestAuthHandler, но это все равно дает 401 ошибку. Parker Coates
Извините, не получил аутентификационную часть. Я обновлю свой ответ через секунду.
1
Как я узнаю, что такое "область"? и "URI" перейти на add_password? Полагаю, очевидно, что я не очень много знаю об HTTP и аутентификации. Parker Coates
Используйте urllib2.HTTPPasswordMgrWithDefaultRealm, ему не нужно знать область. Насколько я понял, область - это просто способ сервера предоставить (удобочитаемое) имя для области входа в систему. Ура,

Похожие вопросы