我有以下场景:
- 我有一个类似 ShoutCast 的服务器,可以提供广播电台的 XML 信息。
- 我有一个 Flash Player 客户端需要获取它。
- Flash Player 在使用 GET 时无法通过 HTTP-Basic 身份验证获取内容。
- 所以我正在构建一个 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、用户名和密码,一切正常。我错过了什么?
最佳答案
它可能还需要 User-Agent 或 Accepts header 。
尝试使用 Firefox 或 Chrome 开发工具中的 Firebug 或 LiveHTTP Headers 比较/复制浏览器发送的一些 http header 。比较您的十六进制密码以确认它是正确的。然后一次一个地添加其他 header ,直到您发现问题为止。
关于python - HTTP-Basic 身份验证上的 404?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7923413/