#python #http #basic-authentication
#python #http #базовая аутентификация
Вопрос:
У меня следующий сценарий:
- У меня есть сервер SHOUTcast-иш, который обслуживает XML-информацию о радиостанции.
- У меня есть клиент Flash Player, который должен его получить.
- Flash Player не может извлекать данные через HTTP-базовую аутентификацию при использовании GET.
- Итак, я создаю скрипт CGI на Python для обработки аутентификации и повторного предоставления информации.
Надеюсь, это имеет смысл. По сути, мой скрипт служит прокси-сервером для реальных данных, создавая HTTP-запрос, извлекая данные и отправляя их по запросу.
Вот мой Python
#!/usr/bin/python
import base64, cgitb, sys, urllib2
cgitb.enable()
print "Content-Type: text/xml"
print
username = "username"
password = "password"
url = "http://s6.voscast.com:7158/admin.cgi?mode=viewxml"
auth = base64.encodestring('%s:%s' % (username, password))[:-1]
request = urllib2.Request(url)
request.add_header("Authorization", "Basic %s" % auth)
try:
handle = urllib2.urlopen(request)
except IOError, e:
print "Something Failed."
sys.exit(1)
print handle.read()
Довольно просто, не так ли? К сожалению, это не работает. Если я захожу на веб-сайт в браузере и ввожу те же имя пользователя и пароль, это работает; Я вижу дерево XML.
Вместо этого я получаю следующий вывод в stdout
:
Content-Type: text/xml
ICY 404 Resource Not Found
icy-notice1:<BR>SHOUTcast Distributed Network Audio Server/Linux v1.9.8<BR>
icy-notice2:The resource requested was not found<BR>
Что я делаю не так? Учитывая тот же URL, имя пользователя и пароль в браузере, все работает. Что я пропустил?
Ответ №1:
Для этого может потребоваться пользовательский агент или также принимает заголовок.
Попробуйте сравнить / скопировать некоторые http-заголовки, отправленные вашим браузером, используя заголовки Firebug или LiveHTTP в Firefox или Chrome dev tools. Сравните ваш шестнадцатеричный пароль, чтобы подтвердить его правильность. Затем добавляйте другие заголовки по одному, пока не обнаружите проблему.
Комментарии:
1. Это было именно так, я добавил a
User-Agent
, и это сработало. Спасибо!2. Верно, такая вещь не должна иметь значения… но вы были бы удивлены, как часто это происходит.