#何が起きたのか
Python の Requests ライブラリが発行している HTTPS POST リクエストを Fiddler でキャプチャして中身を見ようとしたら "check_hostname requires server_hostname" というエラーで例外を吐いてアプリが落ちてしまった。
#何をしようとしてたのか
Azure の Cognitive Services の Long Audio API の REST API の仕様がイマイチわからなかったので、ドキュメント中にある Python のコードの動きからリバースエンジニアリングを仕掛けようとしてた。
Long Audio API
https://docs.microsoft.com/ja-jp/azure/cognitive-services/speech-service/long-audio-api
#見立て
Fiddler が HTTPS の終端をしたうえで通信内容をキャプチャ、その後再暗号化をして Python に通信を受け渡すという(中間者攻撃的な)プロキシの働きをしているのを、Python の証明書もしくはホスト名の検証機能が検出しているのだろうなぁと考えた。
#対応策検討
"check_hostname requires server_hostname proxy" で検索すると、真っ先に 10 日前に投稿された StackOverflow の以下の回答が見つかった。
Why requests raise this exception “check_hostname requires server_hostname”?
https://stackoverflow.com/questions/66642705/why-requests-raise-this-exception-check-hostname-requires-server-hostname
それによれば、urllib3 ライブラリのバグらしい。
以下コマンドでバグってないバージョンを入れれば直るとのこと。
pip install urllib3==1.25.8
#やってみた
Python 実行時に以下の警告が出るものの、無事に Fiddler で通信内容のキャプチャに成功!
host '127.0.0.1'. Adding certificate verification is strongly advised. See: https://urllib3.readthedocs.io/en/latest/advanced-usage.html#ssl-warnings
何度やっても上手くいかなかった REST での呼び出し、音声合成用の設定と原文の入力ファイルを multipart で送れば良かったのね、ということが判明。
#まとめ
新しいバグに関しては英語のユーザーフォーラムをあたるのって結構大事。