21
19

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Rのパッケージインストール時のプロキシ設定

Posted at

Rのパッケージダウンロードでプロキシの設定にはまったので覚書。

対象環境

  • R-3.5.1 for Windows 64 bit
  • RStudio 1.1.463 - Windows 64bit
  • Windows Server 2008 64bit
  • インターネット接続にはプロキシ認証が必要

現象

install.packages("pkgname")を実行すると、407 Proxy Authentication Requiredが返る(RStudioの画面は"Cannot open ")。

対処法

まずはRStudioで(Rコンソールでもrguiでも可)を以下を試して接続可能か確認する。

proxy_url = "http://user:pass@proxyhost:proxyport"
Sys.setenv("http_proxy" = proxy_url)
Sys.setenv("https_proxy" = proxy_url)

curlGetHeaders("http://www.google.com/") # URLはなんでもいいのでこれで200が返るか試す

これで通るなら以下のようにすればパッケージダウンロードができるようになる。

options(download.file.method = "libcurl")
install.packages("pkgname")

毎回やるのが面倒なら、以下のようにプロファイルと環境変数ファイルを作成する。

file.edit('~/.Rprofile')
file.edit('~/.Renviron')
.Rprofile(既存なら追記)
options(download.file.method = "libcurl")
.Renviron(既存なら追記)
http_proxy="http://user:pass@proxyhost:proxyport"
https_proxy="http://user:pass@proxyhost:proxyport"

確認できたこと

パッケージのダウンロードには、download.file()関数を使用しているらしい。そして少なくともWindows版ではデフォルトのhttp通信method(HTTPリクエストメソッドのことではなく使用するAPI)が"wininet"で、Windows OSのWinInet関数を使用する。そしてこの関数とプロキシサーバの相性が悪いときにこれにハマる。おそらくdownload.file()はプロキシの認証情報もOS(資格情報)から取得しているので、グループポリシーで認証情報を保存できない(つまりIEを起動するたびに認証情報を入力しなければならないようになっている)場合、認証情報なしでプロキシにリクエストを投げて407が返る。環境変数から認証情報を取得してくれればよいものを、どうやらそういう実装にはなっていない。
methodを"WinInet"以外にすれば、そのAPIを使用した実装次第で環境変数から認証情報を取ってきてくれるということっぽい。

というわけで今回は、download.file()関数のmethodを"libcurl"にしたらプロキシ認証できた。今の所は残念ながらRStudioでは動的にプロキシ認証情報を渡せないらしいので、ファイルに書いておくしかない。

参考資料

21
19
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
21
19

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?