Help us understand the problem. What is going on with this article?

プロキシ認証を通して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関数の呼び出し方は、個人的にはめんどくさくてあまり好きじゃない。

公式サイト情報

sameyasu
fancs
日本最大規模の広告配信プラットフォームを開発しているアドテクノロジーエンジニアチームです
https://www.fancs.com/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away