プロキシがある場合のツールの設定いろいろ その2
プロキシがある場合のツール等の設定いろいろ - penultimate diary の続き。各ツールでのWindows環境における認証つきプロキシの通り方。
npm
コマンドプロンプトで以下のようにする。
npm config set proxy http://<username>:<password>@<proxy-host>:<proxy-port> npm config set https-proxy http://<username>:<password>@<proxy-host>:<proxy-port>
一応補足すると username, password はプロキシのユーザ名・パスワード。proxy-host と proxy-port はプロキシサーバのホスト名とポート番号。
上では HTTP も HTTPS も同じプロキシを設定しているが、違うのならURLを変更すること。
また、私の環境だけかもしれないが、プロキシ越しだと証明書のエラーにより通信できないため、以下のコマンドも実行する必要があった。ただ、これを行うと接続先が本当に本物の npmjs.org サイトかどうか検証しなくなるということなので、良く考えること。
npm config set strict-ssl false
認証情報についての補足
上記の npm のようにプロキシをURL形式で指定する場合、URLなので認証情報部分(上記の username, password)などはURLエンコードして設定するのが正しいはず。
例えば npm では、ユーザ名 user、パスワード P@ssword の場合、以下のようにすれば正しく設定される。
npm config set proxy http://user:P%40ssword@proxy.example.com:8080
ところが gem というか ruby の URI ライブラリだか Net::HTTP ライブラリだかは認証情報部分をきちんとデコードしてくれないので、
set http_proxy=http://user:P%40ssword@proxy.example.com:8080
は、パスワードがそのまま "P%40ssword" で送られてしまい認証に失敗するし、かといって
set http_proxy=http://proxy.example.com:8080 set http_proxy_user=user set http_proxy_pass=P@ssword
のように指定してみても、↓こんな風に
ERROR: While executing gem ... (URI::InvalidComponentError) bad component(expected user component): P@ssword
URLの認証情報部分として形式がおかしいとかエラーが出て通信できない。つまり、認証情報にアットマークを含むと八方塞がり。
しょうがないので Rubyのホームディレクトリ\lib\ruby\1.9.1\uri\generic.rb の438-441行目を一時的にコメントアウトして
# if parser.regexp[:USERINFO] !~ v # raise InvalidComponentError, # "bad component(expected user component): #{v}" # end
とした上でURLエンコードせず http_proxy_pass=P@ssword で設定したら上手くいくようになった。