1. ホーム
  2. php

プロキシの後ろで file_get_contents を使うか?

2023-08-14 14:45:43

質問

仕事では、基本的にプロキシを使用してポート 80 などにアクセスする必要があり、各ユーザーに独自のカスタム ログインを使用しています。

私の一時的な回避策は、基本的にプロキシを通して自分自身としてログインし、必要な外部データにアクセスするために、curl を使用することです。

phpの高度な設定のようなものがあり、内部的に、以下のようなものを呼び出そうとするたびに設定することができます。 file_get_contents() のようなものを呼び出そうとすると、常にプロキシを経由するように設定できる高度なphp設定はありますか?私はWindowsのATMを使用しているので、それが唯一の方法である場合、再コンパイルするのは苦痛です。

私の回避策が一時的なものである理由は、1 人のユーザーの資格情報を使用する代わりに、汎用的で複数のユーザーで動作するソリューションが必要だからです (これを行うためだけに別のユーザー アカウントを要求することを検討しましたが、パスワードは頻繁に変更され、この手法は 10 以上のサイト全体に展開する必要があります)。私は、基本的に、curl の回避策を使用するためにクレデンシャルをハードコードしたくありません。

どのように解決するのですか?

使用方法 file_get_contents() を認証不要のプロキシ上で使うには、以下のようにします。

(これはテストできません: 私のプロキシは認証が必要です)

$aContext = array(
    'http' => array(
        'proxy'           => 'tcp://192.168.0.2:3128',
        'request_fulluri' => true,
    ),
);
$cxContext = stream_context_create($aContext);

$sFile = file_get_contents("http://www.google.com", False, $cxContext);

echo $sFile;

もちろん、私のプロキシのIPとポートを、あなたのプロキシでOKなものに置き換えてください ;-)

もし、そのようなエラーが発生した場合は.

Warning: file_get_contents(http://www.google.com) [function.file-get-contents]: failed to open stream: HTTP request failed! HTTP/1.0 407 Proxy Authentication Required

プロキシが認証を要求していることを意味します。

プロキシが認証を要求している場合、以下のように数行を追加する必要があります。

$auth = base64_encode('LOGIN:PASSWORD');

$aContext = array(
    'http' => array(
        'proxy'           => 'tcp://192.168.0.2:3128',
        'request_fulluri' => true,
        'header'          => "Proxy-Authorization: Basic $auth",
    ),
);
$cxContext = stream_context_create($aContext);

$sFile = file_get_contents("http://www.google.com", False, $cxContext);

echo $sFile;

IPとポート、そして今回はLOGINとPASSWORDについても同じです ;-) すべての有効な http オプション .

ここで プロキシ認証 ヘッダをプロキシに渡しています。

そして... ページが表示されるはずです ;-)