[PHP] cURLによるプロキシを利用した接続

2019年5月18日(更新: 2019年5月26日)

PHP で cURL を使用すると、簡単にサーバー間のデータ送受信を行うことができます。

以下では、指定したプロキシを利用してHTTPリクエストを送信するサンプルを紹介します。

cURLの使用例

cURLの基本的な使用の流れは、次の通りです。

  1. curl_initでcURLセッションを開始
  2. curl_setoptで転送用オプションを設定
  3. curl_execでセッションを実行して結果を受け取る
  4. curl_closeでセッションを終了

以下は、この流れに沿って適当なオプションを設定したcURLを実行するサンプルスクリプトです。プロキシを利用するにあたって重要なオプションは CURLOPT_HTTPPROXYTUNNEL および CURLOPT_PROXY です。

<?php

// 接続するURL
$url = 'https://○○○';
// アドレス:ポート番号
$proxy = 'XXX.XXX.XXX.XXX:8080';

// cURLの初期化
$ch = curl_init($url);

// プロキシの有効化
curl_setopt($ch, CURLOPT_HTTPPROXYTUNNEL, true);

//使用するプロキシの指定
curl_setopt($ch, CURLOPT_PROXY, 'http://' . $proxy);

// curl_exec による HTML 出力を防ぐ
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

// 試行時間
curl_setopt($ch, CURLOPT_TIMEOUT, 16);

// 最低速度
curl_setopt($ch, CURLOPT_LOW_SPEED_LIMIT, 8);

// 最低速度が 3秒 続いたら終了させる
curl_setopt($ch, CURLOPT_LOW_SPEED_TIME, 3);

// HTTP で 400 以上のコードが返ってきた際に処理失敗と判断
curl_setopt($ch, CURLOPT_FAILONERROR, true);

// 実行
$result = curl_exec($ch);

if (!$result) {
	echo 'NG(' . curl_error($ch) . ')';
} else {
	echo 'OK';
}

curl_close($ch);

?>

サンプルページ

以下のページは上記スクリプトを応用したもので、複数のプロキシの接続をテストすることができます。

プロキシ接続テスト

実行結果の例です。

cURLを利用したプロキシによる接続テスト

以上、PHPのcURLによるプロキシを利用した接続についてでした。cURLの詳しい利用方法などについては PHP: cURL – Manual を御覧ください。

コマンドのcurlを使う

わざわざPHPで行う必要がないのであれば、ターミナルなどでコマンド「curl」を使えば済みます。

以下は、出力の抑制やユーザーエージェントの指定、最大実行時間などのオプションを指定したcurlを実行するシェルスクリプトの例です。

#!/bin/sh

url="接続先URL"
address="アドレス:ポート番号"

curl -sS -o /dev/null -A "任意のユーザーエージェント" -m 30 --proxy http://${address} ${url}

コメントを残す

メールアドレスが公開されることはありません。