PHPで外部サイトへPOSTリクエストを送る3つの方法

PHPで外部サイトへのPOSTリクエストの送信は、APIとの連携やデータの取得・送信に不可欠なスキルです。本記事では、cURL、file_get_contents、およびGuzzleを使った3つの主要な方法を詳細に解説します。

cURLを使用する方法

cURLは多機能なコマンドラインベースのデータ転送ユーティリティですが、PHPからもライブラリとして利用可能です。特に、多くのカスタマイズが可能なので、柔軟な操作が求められる場合に有用です。

<?php
// 初期化
$ch = curl_init();

// オプションを設定
curl_setopt($ch, CURLOPT_URL, 'https://example.com/api/resource');
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, 'key1=value1&key2=value2');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

// 実行とレスポンスの取得
$response = curl_exec($ch);

// エラーチェック
if (curl_errno($ch)) {
    echo 'Error: ' . curl_error($ch);
}

// リソースを閉じる
curl_close($ch);

// レスポンスを出力
echo $response;
  • curl_initでcURLセッションを初期化します。
  • curl_setoptで各種オプションを設定します。この場合、ターゲットURL、POSTメソッドの使用、送信するデータなどを指定しています。
  • curl_execでリクエストを実行し、レスポンスを取得します。
  • curl_closeでセッションを閉じます。

file_get_contentsを使用する方法

file_get_contentsはPHPの組み込み関数であり、ファイルやURLからデータを簡単に取得できます。ただし、高度なオプションは少ないです。

<?php
$options = [
    'http' => [
        'method' => 'POST',
        'header' => 'Content-type: application/x-www-form-urlencoded',
        'content' => http_build_query(['key1' => 'value1', 'key2' => 'value2'])
    ]
];
$context = stream_context_create($options);
$response = file_get_contents('https://example.com/api/resource', false, $context);

if ($response !== false) {
    echo $response;
} else {
    echo "Error!";
}
  • stream_context_createでHTTPオプションを設定します。
  • file_get_contentsで指定したオプションを使用してリクエストを実行し、レスポンスを取得します。

Guzzleを使用する方法

GuzzleはPHPのHTTPクライアントライブラリで、コードの可読性と再利用性が高いです。ただし、事前にComposerを使ってインストールする必要があります。

<?php
require 'vendor/autoload.php';

use GuzzleHttp\Client;

$client = new Client();
$response = $client->post('https://example.com/api/resource', [
    'form_params' => [
        'key1' => 'value1',
        'key2' => 'value2'
    ]
]);

echo $response->getBody();
  • GuzzleはComposerでインストールするため、require ‘vendor/autoload.php’が必要です。
  • new Client()でGuzzleクライアントを初期化します。
  • postメソッドでPOSTリクエストを送信し、レスポンスを取得します。

まとめ

以上が、PHPで外部サイトへPOSTリクエストを送信する3つの主要な方法です。cURLは柔軟性が高く、file_get_contentsは簡易性があり、Guzzleは可読性と再利用性に優れています。プロジェクトの要件や好みに応じて、適切な方法を選んでください。