【问题标题】:404 on HTTP-Basic authentication?404 上的 HTTP 基本身份验证?
【发布时间】:2011-10-28 07:11:10
【问题描述】:

我有以下场景:

  1. 我有一个 ShoutCast-ish 服务器,它提供广播电台 XML 信息。
  2. 我有一个 Flash Player 客户端需要获取它。
  3. 使用 GET 时,Flash Player 无法通过 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、用户名和密码,一切正常。我错过了什么?

【问题讨论】:

    标签: python http basic-authentication


    【解决方案1】:

    它可能还需要一个 User-Agent 或 Accepts 标头。

    尝试使用 Firefox 或 Chrome 开发工具中的 Firebug 或 LiveHTTP 标头比较/复制浏览器发送的一些 http 标头。比较您的十六进制密码以确认它是正确的。然后一次添加一个其他标题,直到您发现问题为止。

    【讨论】:

    • 就是这样,我添加了一个User-Agent 并且它起作用了。谢谢!
    • 是的,这样的事情应该无关紧要......但你会惊讶于它发生的频率。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-03-21
    • 2011-11-12
    • 2011-05-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多