前に file_get_contents() 関数を使ったネタを書きましたが 社内などでプロキシを経由している場合は エラーになってしまいます。
プロキシの接続情報を含め、追加情報を設定するには 第 3 引数にコンテキストを設定します。
echo file_get_contents('http://www.yahoo.co.jp/', FALSE, $context);
コンテキストを作成するには stream_context_create() 関数を使います。
[参考]
PHP: stream_context_create - Manual
HTTP の場合次のようにすると POST 送信になります。
$context = stream_context_create( array( "http" => array( "method" => "POST", ) ));
設定できるパラメータはマニュアルを参照してください。
[参考]
PHP: コンテキストオプションとパラメータ - Manual
プロキシの設定は次のように tcp://host:port で指定します。
$context = stream_context_create( array( "http" => array( "proxy" => "tcp://192.168.1.200:3128", "request_fulluri" => TRUE, ) ));
プロキシ経由の場合 request_fulluri も指定します。
プロキシにユーザ認証がある場合ですが ネットで検索したら proxy_user, proxy_pass を設定するとありました。
$context = stream_context_create( array( "http" => array( "proxy" => "tcp://192.168.1.200:3128", "request_fulluri" => TRUE, "proxy_user" => "xxxxx", "proxy_pass" => "yyyyy", ) ));
[参考]
プロキシ経由でfile_get_contents - Road To Nowhere
ただ、この方法では自分の環境では認証エラーになってしまいました。 仕方ないので 次のように プロキシ用のヘッダを生成して使用しています。 自分の環境のプロキシは Basic schema なので Base64 でエンコードするだけです。
$url = "http://www.google.co.jp/"; $proxy_host = "192.168.1.200"; $proxy_port = "3128"; $proxy_user = "xxxxx"; $proxy_pass = "yyyyy"; $proxy_auth = base64_encode("$proxy_user:$proxy_pass"); $context = stream_context_create( array( "http" => array( "proxy" => "tcp://$proxy_host:$proxy_port", "header" => "Proxy-Authorization: Basic $proxy_auth", "request_fulluri" => TRUE, ) )); echo file_get_contents($url, FALSE, $context);