HTTP基本认证出现404错误?
我遇到了以下情况:
- 我有一个类似ShoutCast的服务器,它提供电台的XML信息。
- 我有一个Flash播放器客户端需要获取这些信息。
- 但是,Flash播放器在使用GET请求时,无法通过HTTP基本认证来获取数据。
- 所以我正在编写一个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头信息。确认一下你的密码是否正确。然后逐个添加其他的头信息,直到找到问题所在。