ハマログ

株式会社イーツー・インフォの社員ブログ

Python3でBasic認証の必要なURLにアクセスする

Pythonでコードを書く機会がありまして、(途中で挫折しましたが)お手軽でなかなか楽しかったです。

最初、MacOSに標準バンドルされているPythonを使っていましたが、バージョンが2系だったので、途中で3系に切り替えました。
所感としては、ウェブで検索すると2系と3系の情報がどっちも表示されてキツかった。
Pythonは、便利なライブラリが標準でバンドルされてるため、結局公式ドキュメントが一番いいなーと思いました。
さて、今回はウェブAPIとの通信を実装したのですが、Basic認証の突破に苦労したので記録を残しておきたいと思います。
# 略

# encodeでbytes型(utf-8)に変換
basic_user_and_pasword = base64.b64encode('user:password'.encode('utf-8'))

# dataがあるとPOSTリクエストになる
request = urllib.request.Request(oauth_authorize_url, headers={"Authorization": "Basic " + basic_user_and_pasword.decode('utf-8')}, data=encoded_post_data)
response = urllib.request.urlopen(request)
Python3は型の定義が厳密で、たとえば、
base64.b64encode()
は、Python2だと以下の通り文字列を受け取る、となっていましたが、
https://docs.python.org/2/library/base64.html
s is the string to encode.

Python3の場合は、バイト文字列を受け取るようになりました。
https://docs.python.org/3/library/base64.html
Encode the bytes-like object s using Base64 and return the encoded bytes.

そのため、encode, decode関数でバイトと文字列の変換をおこなっています。
余談ですが、Python2とPython3って全然互換ないとおもってちょっと調べてたのですが、いろいろな経緯があるようで、大変そうだなーと思いました。
Python 3を使うべきでない場合(なんてない)
Python 3誕生の理由 ― つまり、なぜunicode/str/bytesの仕様は変更されたのか
最終的には言語一個になっちゃえばいいのに、と思いながら、本日は以上になります。
authAuthorizationAuthorizeBacic認証PythonPython2Python3

kaneko tomo   kaneko tomo   2017年6月3日


関連記事

夏休みの宿題(JSで放物線をシミュレーションする)

はじめに 少し前に買った、「8月号増刊『60分でわかる 微分と積分』 (Newt…

爆速PHPフレームワーク「Phalcon」をお試し

浅春の候、皆様におかれましては益々ご健勝のこととお慶び申し上げます。 Shinが…

テスト設計技法 – デシジョンテーブルテスト

どうもーyasuです~ そろそろ涼しくなってきたかな? 一つ報告、8/25にテス…


← 前の投稿

次の投稿 →