HTTP基本认证出现404错误?

1 投票
1 回答
1859 浏览
提问于 2025-04-17 05:09

我遇到了以下情况:

  1. 我有一个类似ShoutCast的服务器,它提供电台的XML信息。
  2. 我有一个Flash播放器客户端需要获取这些信息。
  3. 但是,Flash播放器在使用GET请求时,无法通过HTTP基本认证来获取数据。
  4. 所以我正在编写一个Python CGI脚本来处理认证,并重新提供这些信息。

希望这样说能让你明白。简单来说,我的脚本就像一个中介,它通过创建一个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 个回答

2

这可能还需要一个用户代理(User-Agent)或者接受头(Accepts header)。

你可以试着用Firebug或者Firefox里的LiveHTTP Headers,或者Chrome的开发者工具,来比较或复制一下你浏览器发送的HTTP头信息。确认一下你的密码是否正确。然后逐个添加其他的头信息,直到找到问题所在。

撰写回答