404-HTTP认证?

时间:2011-10-27 22:59:52

标签: python http http-basic-authentication

我有以下情况:

  1. 我有一个ShoutCast-ish服务器,用于提供广播电台的XML信息。
  2. 我有一个需要获取它的Flash Player客户端。
  3. 使用GET时,Flash Player无法通过HTTP-Basic身份验证获取内容。
  4. 所以我正在构建一个Python CGI脚本来处理身份验证并重新提供信息。
  5. 希望这是有道理的。从本质上讲,我的脚本通过创建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 个答案:

答案 0 :(得分:2)

它也可能需要User-Agent或Accepts标头。

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