私は遊んでいて、tr.imAPIを 使用してURLを短くするコードを書こうとしています。
http://docs.python.org/library/urllib2.htmlを読んだ後、私は試しました:
TRIM_API_URL = 'http://api.tr.im/api'
auth_handler = urllib2.HTTPBasicAuthHandler()
auth_handler.add_password(realm='tr.im',
uri=TRIM_API_URL,
user=USERNAME,
passwd=PASSWORD)
opener = urllib2.build_opener(auth_handler)
urllib2.install_opener(opener)
response = urllib2.urlopen('%s/trim_simple?url=%s'
% (TRIM_API_URL, url_to_trim))
url = response.read().strip()
response.codeは200です(202になるはずです)。urlは有効ですが、短縮URLが私のURLリスト(http://tr.im/?page=1)にないため、基本HTTP認証が機能していないようです。
http://www.voidspace.org.uk/python/articles/authentication.shtml#doing-it-properly を読んだ後、私も試しました:
TRIM_API_URL = 'api.tr.im/api'
password_mgr = urllib2.HTTPPasswordMgrWithDefaultRealm()
password_mgr.add_password(None, TRIM_API_URL, USERNAME, PASSWORD)
auth_handler = urllib2.HTTPBasicAuthHandler(password_mgr)
opener = urllib2.build_opener(auth_handler)
urllib2.install_opener(opener)
response = urllib2.urlopen('http://%s/trim_simple?url=%s'
% (TRIM_API_URL, url_to_trim))
url = response.read().strip()
しかし、同じ結果が得られます。(response.codeは200で、URLは有効ですが、http://tr.im/の私のアカウントには記録されていません。)
次のように、基本HTTP認証の代わりにクエリ文字列パラメーターを使用する場合:
TRIM_API_URL = 'http://api.tr.im/api'
response = urllib2.urlopen('%s/trim_simple?url=%s&username=%s&password=%s'
% (TRIM_API_URL,
url_to_trim,
USERNAME,
PASSWORD))
url = response.read().strip()
...その後、URLが有効であるだけでなく、私のtr.imアカウントに記録されます。(response.codeはまだ200ですが。)
私のコードには何か問題があるはずです(tr.imのAPIではありません)。
$ curl -u yacitus:xxxx http://api.tr.im/api/trim_url.json?url=http://www.google.co.uk
...戻り値:
{"trimpath":"hfhb","reference":"nH45bftZDWOX0QpVojeDbOvPDnaRaJ","trimmed":"11\/03\/2009","destination":"http:\/\/www.google.co.uk\/","trim_path":"hfhb","domain":"google.co.uk","url":"http:\/\/tr.im\/hfhb","visits":0,"status":{"result":"OK","code":"200","message":"tr.im URL Added."},"date_time":"2009-03-11T10:15:35-04:00"}
...そしてURLはhttp://tr.im/?page=1のURLのリストに表示されます。
そして私が実行した場合:
$ curl -u yacitus:xxxx http://api.tr.im/api/trim_url.json?url=http://www.google.co.uk
...繰り返しますが、次のようになります。
{"trimpath":"hfhb","reference":"nH45bftZDWOX0QpVojeDbOvPDnaRaJ","trimmed":"11\/03\/2009","destination":"http:\/\/www.google.co.uk\/","trim_path":"hfhb","domain":"google.co.uk","url":"http:\/\/tr.im\/hfhb","visits":0,"status":{"result":"OK","code":"201","message":"tr.im URL Already Created [yacitus]."},"date_time":"2009-03-11T10:15:35-04:00"}
ノートコードは201で、メッセージは「tr.im URL Already Created [yacitus]」です。
基本HTTP認証を正しく行ってはいけません(どちらの試みでも)。私の問題を見つけられますか?おそらく、私はネットワークを介して送信されているものを見て確認する必要がありますか?私は前にそれをしたことがありません。使用できるPythonAPIはありますか(おそらくpdbで)?または、使用できる別のツール(Mac OS X用が望ましい)はありますか?
"WWW-Authenticate"
urllib2(またはhttplib2)が資格情報を送信する前に、サイトが戻ってコード401を送信する必要があります。以下の私の答えを参照してください。