以前、リダイレクトの動作について調べた記事、Windows 上の Ubuntu から curl ができなかったので、その原因を調べました。
参考までに、こちらの記事でリダイレクトの動作を確認しています。ぜひ見てください。
localhost ではなく、正しい IP を指定する
エラーがでる原因は簡単で、Windows 上の Ubuntu は、別のネットワークにあるため、localhost では接続できていませんでした。
コマンドプロンプトから ipconfig で WSL の情報を取得できます。
C:\>ipconfig
Windows IP Configuration
Ethernet adapter vEthernet (WSL):
Connection-specific DNS Suffix . :
Link-local IPv6 Address . . . . . : fe80::853:aefe:83ca:8578%64
IPv4 Address. . . . . . . . . . . : 172.17.126.149
Subnet Mask . . . . . . . . . . . : 255.255.255.240
Default Gateway . . . . . . . . . :
こちらの環境では、172.17.126.149
だということがわかります。
逆に、Ubuntu 上で Apache や Nginx などのサービスを起動した場合は、
- Ubuntu 上では
curl localhost
が問題なく実行できる - コマンドプロンプトからは、WSL の IP を指定する必要がある
となります。
アプリ側 (例: Flask) も変更する
ただ、正しい IP を指定しただけでは、まだエラーがでます。
理由は、アプリ側で全てのリクエストを受け付ける必要があるからです。
(参考: Flask – Externally Visible Server)
Flask の場合は、host=”0.0.0.0″ を指定する必要があります。
# コマンドプロンプトから flask run で起動する場合
flask run --host=0.0.0.0
# python app.py で起動する場合
app.run(host="0.0.0.0")
これで、curl を使って、POST リクエスト送ったり、ヘッダー情報の確認ができるようになります!
実は、コマンドプロンプトから curl ができたという事実
と、ここまで調査したのですが、実は
Windows 10 1803 から標準で curl が使える ようです。。
(参考: Tar and Curl Come to Windows!)
無駄な調査をしてしまった気もしたが、原因が分かったのだからこれで良しとしよう。。。うん。