はじめに
仕事で、社内ネットワーク越しにGHESなどにアクセスするのでzshにproxyを設定している。
あまり深く考えずproxyを使っていたので、(考えたら当たり前なのだが)最近になって色々「アレ?」ってなる経験をしたのでまとめる。
ブラウザでlocalhostにアクセスできるのにcurlだとできない
APIを開発していたときのこと、curl
で
1
curl http://localhost/hoge?fuga=piyo
みたいに打って動作確認をしようとしたが、エラーになりアクセスできない。
でもブラウザでhttp://localhost/hoge?fuga=piyo
にアクセスすると実装どおりのjsonが返る。
アレ?
しばらく悩んだが、よくよく考えたらterminalはproxyを設定しているので、社内ネットワーク上のhoge?fuga=piyo
を見に行こうとしていたぽい。
ブラウザはproxy関係ないのでイメージ通りPCのローカルにアクセスできてたぽい。
axiosで、Node.jsからだとアクセスできるのにBunだとアクセスできない
次、開発したAPIをTypeScriptから使おうとしたが、これまた挙動がおかしい。
proxy設定をaxiosに渡すようコードを書いて、
1
bun run hoge.ts
で実行したが、うまく動かない。
1
ts-node hoge.ts
だと動く。
アレ?
調べていると、bunのランタイムだとaxiosが独自実装されているらしく、proxyの設定を無視するんだとか。
なぜだ…ts動かすのに楽ちんで好きだったのに…。
fetchだとどちらもうまくいくっぽいけど、クライアントがaxiosで実装されていたのでどうすることもできず。
仕方ないから
1
http_proxy= https_proxy= bun run hoge.ts
と一時的にproxy解除して実行することで解決した。
まとめ
ネットワーク系の知識を付けましょう。