[解決済み] Python urllib2、HTTP基本認証、そしてtr.im
質問
を使うコードを書こうとして遊んでいます。 tr.im API を使用して 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は有効ですが 基本的なHTTP認証がうまくいっていないようです。 短縮 URL は私の URL リストにはありません (at http://tr.im/?page=1 ).
読み終わった後 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は私のURLのリストに表示されています。 http://tr.im/?page=1 .
そして、実行すると。
$ 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 認証を正しく行っていないのでしょう (どちらの試みにおいても)。 私の問題を見つけることができますか。 おそらく私は、ワイヤ上で何が送信されるかを見るべきでしょうか。 私はそれを前にしたことがありません。 私が使うことができるPython APIがありますか(おそらくpdbに)? または、私が使用することができる他のツール(できればMac OS X用)がありますか?
どのように解決するのですか?
これは本当によく動作するようです(別のスレッドから取得)。
import urllib2, base64
request = urllib2.Request("http://api.foursquare.com/v1/user")
base64string = base64.encodestring('%s:%s' % (username, password)).replace('\n', '')
request.add_header("Authorization", "Basic %s" % base64string)
result = urllib2.urlopen(request)
関連
-
[解決済み] URI、URL、URNの違いは何ですか?
-
[解決済み] staticmethodとclassmethodの違いについて
-
[解決済み] Pythonには文字列の'contains'サブストリングメソッドがありますか?
-
[解決済み] HTTP GET(リクエストボディ付き
-
[解決済み] java.net.URLConnectionを使用してHTTPリクエストを発生させ処理する方法
-
[解決済み] updateとdeleteのHTTPステータスコード?
-
[解決済み】HTTPのPOSTとPUTの違いは何ですか?
-
[解決済み】ネストされたディレクトリを安全に作成するには?
-
[解決済み】Pythonに三項条件演算子はありますか?
-
[解決済み] バブルソートの宿題
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】インポートエラー。モジュール名 urllib2 がない
-
[解決済み] PythonからSMTPを使用してメールを送信する
-
[解決済み] python-requests モジュールからのすべてのリクエストをログに記録します。
-
[解決済み] Pythonで0xを使わずにhex()を使うには?
-
[解決済み] 範囲指定された浮動小数点数のランダムな配列を生成します。
-
[解決済み] オブジェクトのリストに特定の属性値を持つオブジェクトが含まれているかどうかをチェックする
-
[解決済み] サブフォルダからのインポートモジュール
-
[解決済み] 認証プラグイン 'caching_sha2_password' はサポートされていません。
-
[解決済み] pipの依存性/必要条件をリストアップする方法はありますか?
-
[解決済み] Python, 基本認証付きHTTPS GET