Aşağıdaki senaryo var:
- Radyo istasyonu xml bilgisi sunan bir ShoutCast-ish sunucum var.
- Getirmesi gereken bir Flash Player istemcisi var.
- Flash Player, GET kullanırken HTTP-Basic auth üzerinden bir şey alamaz.
- Bu nedenle, kimlik doğrulamayı işlemek ve bilgileri yeniden sunmak için bir Python CGI komut dosyası oluşturuyorum.
Umarım mantıklı geliyor. Temel olarak, betiğim bir HTTP isteği oluşturarak, verileri alarak ve istendiğinde yayınlayarak gerçek verilere vekalet eder.
İşte benim 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()
Oldukça basit, değil mi? Ne yazık ki, işe yaramadı. Bir tarayıcıda web sitesini ziyaret edip aynı kullanıcı adını ve şifreyi girersem çalışır; xml ağacını görebiliyorum.
Bunun yerine, stdout
'da şu çıktıyı alıyorum:
Content-Type: text/xml
ICY 404 Resource Not Found
icy-notice1:
SHOUTcast Distributed Network Audio Server/Linux v1.9.8
icy-notice2:The resource requested was not found
Neyi yanlış yapıyorum? Bir tarayıcıdaki aynı URL, kullanıcı adı ve şifre göz önüne alındığında, her şey çalışıyor. Neyi kaçırdım?