Python3でBasic認証の必要なURLにアクセスする
Pythonでコードを書く機会がありまして、(途中で挫折しましたが)お手軽でなかなか楽しかったです。
最初、MacOSに標準バンドルされているPythonを使っていましたが、バージョンが2系だったので、途中で3系に切り替えました。
所感としては、ウェブで検索すると2系と3系の情報がどっちも表示されてキツかった。
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
Python3の場合は、バイト文字列を受け取るようになりました。
https://docs.python.org/3/library/base64.html
そのため、encode, decode関数でバイトと文字列の変換をおこなっています。
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の仕様は変更されたのか
最終的には言語一個になっちゃえばいいのに、と思いながら、本日は以上になります。
Python 3を使うべきでない場合(なんてない)
Python 3誕生の理由 ― つまり、なぜunicode/str/bytesの仕様は変更されたのか
最終的には言語一個になっちゃえばいいのに、と思いながら、本日は以上になります。