アルゴリズム忘備録

競技プログラミングとかデータ分析とか

RのProxy設定

RのProxy設定はぐぐると色々出ては来るのですが、それでもトラブルが多いのでメモ。

まず同じProxyでも以下のパターンが存在します。

  1. Proxyのホストとポートを指定し、Proxy自体に認証はなし
  2. Proxyのホストとポートを指定し、Proxy自体に認証がある
  3. pacスクリプトによるProxy設定で、Proxy自体に認証がある

 (pacスクリプトで、かつ認証なしのパターンはあんまり聞いたことないです)

まずpacスクリプトによる設定の場合は、本来社内LANへの接続をProxy側で判断すべきところをクライアントのスクリプトに任せているだけというパターンが多いので、pacスクリプトの中身を見てやれば、CRANのインストール等は結局2に集約されるかと思います。

 

さて、Windows上のRのProxy設定ですが、確証はないものの以下の2個の設定のいずれかが有効になるようです。

  1. 環境変数http_proxyの設定
  2. システムプロパティ(インターネットオプション)のProxy設定

R+RStudioで使っている限りでは2が優先的に認識されているような感じがします。

(が、ネット上の情報では1が書かれているパターンが多いです。)

さらに認証については http_proxy_user = ask と環境変数を設定することで、認証ダイアログが開く、みたいな記述があります。

(が、これもたまに有効にならなかったりします。)

 

また認証付きProxyの場合のめんどくさい要素として、認証パスワードの定期変更があるかと思います。そのため、RだけでなくGitやnpm, pipなどのProxy設定を毎回書き換える必要があり、かつ平文で記述されたパスワードが至る所に散乱しているので精神衛生上もよくありません。

 

そこでおすすめしたいのが、Fidderを使った認証付きパスワードの一元化です。

 

Fiddlerは下記のサイトで入手できるいわゆるローカルProxyです。

http://www.telerik.com/fiddler

これにFidder Scriptというのがありますので、このScriptのOnBeforeRequestのところでProxy-Authneticationヘッダーを付与してしまいましょう。

やり方としては以下のQiitaに書いてありますが、これは固定値埋め込みになっています。

qiita.com

Script自体はC#チックですので、環境変数にパスワードとIDを書いておくと、そこから読み込んでBASE64エンコーディングした値を入れてやる、という方法もあります。

 

 

これで設定し、Fidderを起動するとhttp://localhost:8888 にローカルProxyができますので、これをシステムProxyと環境変数http_proxy等に設定してあげることでCRANへのアクセスもProxy環境下でも可能になります。