ハマログ

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

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   2017年6月3日


関連記事

AWS CDKで作った定期的なタスク起動がたまに失敗するのでStep Functionsを導入したお話

昔々あるところに、毎日起動しているはずのAmazon ECSのタスクが起動しなか…

XAMPPでXdebugのON/OFFを簡単に切り替えられるようにした

ただいまインターン最終日の定時を迎えています。nomiです。期間は1ヶ月以上あっ…

TCPDFで日本語フォントを利用する

はじめに PHPからPDFファイルを作成・出力するためのライブラリTCPDFで日…


← 前の投稿

次の投稿 →