LabVIEW HTTPClient のプロキシー設定
LabVIEW HTTPClient関数は、システムのプロキシーサーバの設定は見ないので、
そのままでは、プロキシー経由の通信ができない。
Windowsでは、インターネットオプション>>接続>>LANの設定の画面に
ある「プロキシーサーバ」のところに、設定項目があるが、これを設定しても
HTTPClient 関数には無視される。
環境変数に http_proxy を設定すれば、Proxyサーバ経由でWebサーバと通信することができる。
なお、Windowsでの環境変数の設定は、マイコンピュータのプロパティから「システムの詳細設定」
画面を開いて、「詳細設定」タブ画面の「環境変数」ボタンから設定できる。
Proxyサーバのアドレスやポート番号は、ネットワーク管理者に確認すること。
変数名: http_proxy
変数値: http://<サーバ名 or IP アドレス>: <ポート番号>
例: http://192.168.52.240:8880
LabVIEW起動中に、この値を変更しても、LabVIEWには認識されないので、環境変数 http_proxy設定後に、
一度、LabVIEWを終了する必要がある。
(http_proxyが必要なあたりは、なぜか unixから移植されたツール等と同じ。)
なお、cRIO-RTでも、.outファイル(DLL)を作成して、putenv()関数で、環境変数HTTP_PROXYを
設定することで、同じようにプロキシーサーバ経由でHTTPClientが使えることは確認した。
ちなみに LabVIEW 2013 から追加された WebDAVクライアント関数も同様。
できれば、DLLなどを自作しなくても使えるようにLabVIEW側で対応してほしいものだ。
さらにいくつか問題が発覚したので、追記しておく。
1.認証
環境変数http_proxyに、ユーザ名とパスワードを付加すれば解決できそうな気がしますが、
機会がなく試したことはありません。もしかしたら、proxy_user, proxy_passwordかもしれません。
また、ユーザ名とパスワードがだだもれになること、ユーザによって切り替えできないことも問題。
2.環境変数http_proxyだと宛先IPによるプロクシーサーバの切り替えができない、が、対象外は設定できる
問題としてはより深刻。
社外のサーバ、社内の有線/無線LANDAQデバイスと同時に通信する場合、
社外のサーバに対して、プロクシーサーバ経由でしかつなげられないからといって、
環境変数http_proxyを設定してしまうと、社内の有線/無線LANDAQデバイスと
通信できなくなってしまう。
Windowsのプロクシー設定だと、proxy.pacというスクリプトを書くことで、接続しようと
している宛先のIPによって、プロクシー経由か、直接つなぐかを切り替えできますが、
環境変数http_proxyでは、そういう器用なことはできません。
無線LANDAQデバイスで各種センサーデータを収集して外部のサーバに送信する、というのは
ごく普通に思いつくソリューションなので、これができないとなると、結構、痛い。
接続先のIPアドレスによって、プロクシーサーバの切り替えはできないが、特定のIPを
プロクシーの対象外にすることはできる。
方法は、環境変数no_proxyにIPアドレスをカンマ区切りで追加していくだけ。
注意としては、'*'などワイルドカード指定にはできないらしい。
LabVIEWのhttp/webdav通信でも、Windowsの設定を利用するように修正してもらいたいものだ。