404 - HTTPの基本認証?

私は次のシナリオを持っています:

  1. ラジオ局のXML情報を提供するShoutCast-ishサーバを持っています。
  2. Flash Playerクライアントを取得する必要があります。
  3. GETを使用している場合、Flash PlayerはHTTP-Basic認証では取得できません。
  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:
SHOUTcast Distributed Network Audio Server/Linux v1.9.8
icy-notice2:The resource requested was not found

私は間違って何をしていますか?ブラウザで同じURL、ユーザー名、およびパスワードを指定すると、すべてが機能します。私は何を逃したのですか?

1

1 答え

User-AgentまたはAcceptsヘッダーも必要になる場合があります。

FirefoxのFirebugまたはLiveHTTPヘッダー、またはChromeの開発ツールを使用して、ブラウザから送信されたhttpヘッダーの一部を比較/コピーしてみてください。 16進数のパスワードを比較して、正しいことを確認してください。次に、問題を発見するまで、一度に1つずつ他のヘッダーを追加します。

2
追加された
それがまさにそれでした。私は User-Agent を追加しました。ありがとう!
追加された 著者 Naftuli Kay,
そういうことは問題ではありません...しかし、あなたはそれがどれほど頻繁に起こるのか驚くでしょう。
追加された 著者 Gringo Suave,