Posted at

プロキシ認証を通してfile_get_contents関数でHTTPリソースを取得する

More than 1 year has passed since last update.


動機

ちょうど実装する機会があったので(プロキシ認証を実装したい訳ではなかったんだけど)まとめました。


サンプルコード

$proxy_url = 'tcp://YOUR_PROXY_HOST:8080';

$proxy_user = 'YOUR_ACCOUNT';
$proxy_pass = 'YOUR_PASSWORD';

$content = file_get_contents($url, false, stream_context_create([
'http' => [
'method' => 'GET',
'request_fulluri' => true, // プロキシ通す場合は必須
'header' =>
// プロキシ認証(Basic認証)のヘッダー
'Proxy-Authorization: Basic '.base64_encode($proxy_user.':'.$proxy_pass)."\r\n".
// file_get_contentsはKeep-Aliveできないので一応クローズしとく
'Proxy-Connection: close',
'proxy' => $proxy_url,
]
]));


テストした実行環境


  • PHP 7.2 (docker php:7.2-cli)


感想


  • プロキシが無いのが一番平和で良い。

  • プロキシがBasic認証に対応してなかったらこれは使えない。

  • 当然ながら並列でたくさんアクセスする際には向いてない。

  • cURL関数使えるならcURLの方が楽かも。


    • でもcURL関数の呼び出し方は、個人的にはめんどくさくてあまり好きじゃない。




公式サイト情報