ntlm認証の場合にプロキシを超える方法
もし企業などのセキュリティ対策が施されている会社の中でphpのfile_get_contentsファンクションを使おうとすると、プロキシサーバーの関係で401 authorization requiredエラーが返ってくることがあります。
このプロキシサーバーを超えるためには以下のようなサイトで紹介されている方法を用いるとうまくいくのですが、ネットワークログオンのユーザ認証方式にNTLM認証が使われているとうまくいきません。
proxy経由で外部のファイルを取得する
理由はphpがNTLM認証をサポートしていないからみたいです。しかし、curlを使えば大丈夫です。
私は以下のサイトを参考にしました。
Windows php curlを使う。
php cUrl でプロキシを通す方法
前者のサイトの通りにやり、phpinfoにcurlの項目が表示されればcurl導入成功です。
私のインターン先の環境では後者のプログラムでもダメだったので、curl_setoptのPHPマニュアルをみて変更を加えました。
curl_setopt PHPマニュアル
コードは以下のようになります。
ADDRESS,ID,PASSは自分の環境に従い入力してください。
curl_exec()ファンクションがfile_get_contentsの代わりをしてくれます。
まあサーバー言語のphpを使わないで、プロキシサーバーに左右されないクライアント言語のjavascriptを使って取得したほうが手っ取り早いかもしれませんが。
参考までに。
ソースコード
<?php //curlがバンドリングされていないと使えません $ch = curl_init("http://google.co.jp"); //curl_exec() の返り値を 文字列で返します。通常はデータを直接出力します。 curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); //プロキシの種類を指定 curl_setopt($ch, CURLOPT_HTTPAUTH,CURLAUTH_NTLM); //プロキシアドレス設定(プロキシのアドレス:ポート名) curl_setopt($ch, CURLOPT_PROXY, 'ADDRESS:80'); //念のためプロキシのポートを指定 curl_setopt($ch, CURLOPT_PROXYPORT, '80'); //プロキシのID,PASSの設定(ID:PASS) curl_setopt($ch, CURLOPT_PROXYUSERPWD, "ID:PASS"); //指定した cURL セッションを実行します $ret = curl_exec($ch); //cURL セッションを閉じ、全てのリソースを開放します curl_close($ch); print($ret); ?>