【发布时间】:2011-10-28 07:11:10
【问题描述】:
我有以下场景:
- 我有一个 ShoutCast-ish 服务器,它提供广播电台 XML 信息。
- 我有一个 Flash Player 客户端需要获取它。
- 使用 GET 时,Flash Player 无法通过 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、用户名和密码,一切正常。我错过了什么?
【问题讨论】:
标签: python http basic-authentication