404 на HTTP-базовой аутентификации?

#python #http #basic-authentication

#python #http #базовая аутентификация

Вопрос:

У меня следующий сценарий:

  1. У меня есть сервер SHOUTcast-иш, который обслуживает XML-информацию о радиостанции.
  2. У меня есть клиент Flash Player, который должен его получить.
  3. Flash Player не может извлекать данные через HTTP-базовую аутентификацию при использовании GET.
  4. Итак, я создаю скрипт 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. Верно, такая вещь не должна иметь значения… но вы были бы удивлены, как часто это происходит.