web-dev-qa-db-ja.com

PHPプロキシ設定を使用してインターネットに接続するには?

インターネットへの直接接続を許可しないプロキシサーバーの背後にいます。すべての私のPHPアプリケーションは、更新チェックなどのためにインターネットに接続できません。

PHPプロキシ設定はどうすればわかりますか?

コードにプロキシ設定を入力したくありません。PHP自体がグローバル設定設定または同様のものを介してそれを使用します。

23
Alexar

ほとんどすべてのインターネットアクセスにプロキシが必要な場合は、このようにすることをお勧めします。

//add this as the first line of the entry file may it is the index.php or config.php
stream_context_set_default(['http'=>['proxy'=>'proxy-Host:proxy-port']]);

プロキシはfile_get_contents だがしかし curl_exec

これは公式文書です。

14
Ian Hu

これは、PHPアプリケーションがインターネットに接続する方法によって異なります。

PHP cUrlを使用して最も可能性の高い状況をとる場合。

curl_setopt($handle, CURLOPT_PROXY, $proxy_url); 
curl_setopt($handle, CURLOPT_PROXYUSERPWD, "[username]:[password]"); 

参照: http://www.php.net/manual/en/function.curl-setopt.php

8
Tramov

サンプルコード:

function getUrl($url)
{
    $ch = curl_init(); 
    $timeout = 5; // set to zero for no timeout 
    curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, $timeout); 
    curl_setopt ($ch, CURLOPT_URL, $url); 
    curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1); 
    curl_setopt($ch, CURLOPT_PROXY, "http://proxy.example.com"); //your proxy url
    curl_setopt($ch, CURLOPT_PROXYPORT, "8080"); // your proxy port number 
    curl_setopt($ch, CURLOPT_PROXYUSERPWD, "username:pass"); //username:pass 
    $file_contents = curl_exec($ch); 
    curl_close($ch); 
    return $file_contents;
}

echo  getUrl("http://www.google.com");
6
Evan Lee

PEAR HTTP_Request2 モジュールを使用します。

これが私のUrlOpen()関数の簡易版です:

function UrlOpen($url)
{
  $request = new HTTP_Request2($url);

  $request->setConfig(array(
    'proxy_Host' => '192.168.1.6',
    'proxy_port' => 8080,
    'proxy_user' => 'MYUSER',
    'proxy_password' => 'MYPASS',
    'ssl_verify_peer' => False,
    'connect_timeout' => 3,
  );

  return $request;
}

$req = UrlOpen($url);
$res = $req->send();
if ($res->getStatus() == '200')
  $data = $request->getBody();
1
Martin Tournoij

はい、可能です!

stream_context_set_default php.iniプロパティを使用して、ファイルでauto_prepend_fileを構成し、このファイルをすべてのPhpプログラムに含めることができます。

私は以下について小さな要点を書きました:

https://Gist.github.com/ebuildy/381f116e9cd18216a69188ce0230708d

フランス語の記事:

https://medium.com/@thomasdecaux/param%C3%A9trer-par-d%C3%A9faut-un-proxy-pour-php-file-get-content-3e9a32416979#.6zbg605cx

これは、システム管理者がホストを構成できるため、開発者がコードを変更する必要がないため、「クール」です。

1
Thomas Decaux

一部のスクリプトでは、環境変数HTTP_PROXY。それは両方のcomposer.pharおよびメディアウィキのメンテナンス/ update.phpスクリプト。

例えば。:

setenv HTTP_PROXY http://1.2.3.4:3934

プロキシがポート3934でリッスンしている1.2.3.4である場合。

0
rustycar

インターネットで検索しましたが、stream_context_set_default()password protectedについて何も見つかりませんでしたプロキシサーバー。

次に、基本認証のパスワードはヘッダーで送信されると考えました。そこで、CURLリクエストから抽出したパスワードでヘッダーを変更しましたが、完璧に機能しました!!!

これがあなたのやり方です:

以下のように、最初にこのリクエストを任意のドメイン(example.com)に送信します。

curl -v -U user:pass -x your_proxy_ip:port --url https://example.com

Curlが送信したヘッダーを参照して、後で使用するこれらのプロキシ行を取得しました。

>   Trying XXX.XXX.XXX.XXX...
> Connected to XXX.XXX.XXX.XXX (XXX.XXX.XXX.XXX) port YYYY (#0)
> Establish HTTP proxy tunnel to example.com:443
> Proxy auth using Basic with user 'your_username_here'
> CONNECT example.com:443 HTTP/1.1
> Host: example.com:443
> Proxy-Authorization: Basic YW1hem9uOnXXXXXXXXXXXXXXX25SMg
> User-Agent: curl/7.47.0
> Proxy-Connection: Keep-Alive
>
< HTTP/1.1 200 Connection established
<
< Proxy replied OK to CONNECT request

では、カスタムヘッダーを作成します。

$default_opts = array(
  'http'=>array(
    'method'=>"GET",
    'header'=>"Proxy-Authorization: Basic YW1hem9uOnXXXXXXXXXXXXXXX25SMg\r\n" .
              "Proxy-Connection: Keep-Alive",
    'proxy'=>"XXX.XXX.XXX.XXX:YYYY"
  )
);

$default = stream_context_set_default($default_opts);


$result = file_get_contents("https://ipleak.net/json/");
print_r(json_decode($result));

そして、それは完璧に動作し、あなたはそれに応じてプロキシサーバーのIPを取得します!

0
Tarik

Drupal=の場合、settings.phpファイルでプロキシ構成を設定できます。

$conf['proxy_server'] 等々。

詳細 ここ

0
Jokerius