PHP cURLのスニペット集
このページは、PHPのcURL関数のスニペットなどをまとめる予定のページです。
目次
注意
- コードのライセンスは CC0 (クレジット表示不要、改変可、商用可) です。
スニペット
cURL
GETリクエスト
$url = 'https://example.com/?key=value'; // リクエスト先のURL
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url); // URL
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); // curl_exec() 経由で応答データを直接取得できるようにする
curl_setopt($curl, CURLOPT_TIMEOUT, 10); // 実行タイムアウトの秒数
curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, 10); // 接続タイムアウトの秒数
$body = curl_exec($curl); // レスポンスボディ取得 (失敗した場合false)
$code = curl_getinfo($curl, CURLINFO_HTTP_CODE); // レスポンスコード
$errno = curl_errno($curl); // エラーコード
$error = curl_error($curl); // エラー文字列
curl_close($curl);
//$json = ($body !== false) ? json_decode($body, true) : false; // レスポンスボディがJSONのときに使用します
POSTリクエスト
$url = 'https://example.com'; // リクエスト先のURL
$data = array( // パラメータ
'key' => 'value',
);
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url); // URL
curl_setopt($curl, CURLOPT_POST, true); // POST送信
curl_setopt($curl, CURLOPT_POSTFIELDS, http_build_query($data, '', '&', PHP_QUERY_RFC3986)); // 送信データをセット (文字列化する)
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); // curl_exec() 経由で応答データを直接取得できるようにする
curl_setopt($curl, CURLOPT_TIMEOUT, 10); // 実行タイムアウトの秒数
curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, 10); // 接続タイムアウトの秒数
$body = curl_exec($curl); // レスポンスボディ取得 (失敗した場合false)
$code = curl_getinfo($curl, CURLINFO_HTTP_CODE); // レスポンスコード
$errno = curl_errno($curl); // エラーコード
$error = curl_error($curl); // エラー文字列
curl_close($curl);
$url = 'https://example.com'; // リクエスト先のURL
$data = array( // パラメータ
'key' => 'value',
'file1' => new CURLFile('/path/to/file.png', 'image/png', 'file.png') // ファイル
);
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url); // URL
curl_setopt($curl, CURLOPT_POST, true); // POST送信
curl_setopt($curl, CURLOPT_POSTFIELDS, $data); // 送信データをセット (連想配列)
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); // curl_exec() 経由で応答データを直接取得できるようにする
curl_setopt($curl, CURLOPT_TIMEOUT, 10); // 実行タイムアウトの秒数
curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, 10); // 接続タイムアウトの秒数
$body = curl_exec($curl); // レスポンスボディ取得 (失敗した場合false)
$code = curl_getinfo($curl, CURLINFO_HTTP_CODE); // レスポンスコード
$errno = curl_errno($curl); // エラーコード
$error = curl_error($curl); // エラー文字列
curl_close($curl);
$url = 'https://example.com'; // リクエスト先のURL
$data = array( // パラメータ
'key' => 'value',
);
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url); // URL
curl_setopt($curl, CURLOPT_POST, true); // POSTリクエスト
curl_setopt($curl, CURLOPT_HTTPHEADER, array('Content-Type: application/json')); // ヘッダー
curl_setopt($curl, CURLOPT_POSTFIELDS, json_encode($data)); // 送信データをセット (JSONエンコードする)
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); // curl_exec() 経由で応答データを直接取得できるようにする
curl_setopt($curl, CURLOPT_TIMEOUT, 10); // 実行タイムアウトの秒数
curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, 10); // 接続タイムアウトの秒数
$body = curl_exec($curl); // レスポンスボディ取得 (失敗した場合false)
$code = curl_getinfo($curl, CURLINFO_HTTP_CODE); // レスポンスコード
$errno = curl_errno($curl); // エラーコード
$error = curl_error($curl); // エラー文字列
curl_close($curl);
HEADリクエスト
$url = 'https://example.com/?key=value'; // リクエスト先のURL
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url); // URL
curl_setopt($curl, CURLOPT_NOBODY, true); // HEADリクエスト
curl_setopt($curl, CURLOPT_HEADER, true); // ヘッダーの内容を出力
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); // curl_exec() 経由で応答データを直接取得できるようにする
curl_setopt($curl, CURLOPT_TIMEOUT, 10); // 実行タイムアウトの秒数
curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, 10); // 接続タイムアウトの秒数
$header = curl_exec($curl); // レスポンスヘッダー取得 (失敗した場合false)
$code = curl_getinfo($curl, CURLINFO_HTTP_CODE); // レスポンスコード
$errno = curl_errno($curl); // エラーコード
$error = curl_error($curl); // エラー文字列
curl_close($curl);
PUTリクエスト
$url = 'https://example.com'; // リクエスト先のURL
$data = array( // パラメータ
'key' => 'value',
);
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url); // URL
curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'PUT'); // PUTリクエスト
curl_setopt($curl, CURLOPT_HTTPHEADER, array('Content-Type: application/json')); // ヘッダー
curl_setopt($curl, CURLOPT_POSTFIELDS, json_encode($data)); // 送信データをセット (JSONエンコードする)
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); // curl_exec() 経由で応答データを直接取得できるようにする
curl_setopt($curl, CURLOPT_TIMEOUT, 10); // 実行タイムアウトの秒数
curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, 10); // 接続タイムアウトの秒数
$body = curl_exec($curl); // レスポンスボディ取得 (失敗した場合false)
$code = curl_getinfo($curl, CURLINFO_HTTP_CODE); // レスポンスコード
$errno = curl_errno($curl); // エラーコード
$error = curl_error($curl); // エラー文字列
curl_close($curl);
DELETEリクエスト
$url = 'https://example.com'; // リクエスト先のURL
$data = array( // パラメータ
'key' => 'value',
);
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url); // URL
curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'DELETE'); // DELETEリクエスト
curl_setopt($curl, CURLOPT_HTTPHEADER, array('Content-Type: application/json')); // ヘッダー
curl_setopt($curl, CURLOPT_POSTFIELDS, json_encode($data)); // 送信データをセット (JSONエンコードする)
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); // curl_exec() 経由で応答データを直接取得できるようにする
curl_setopt($curl, CURLOPT_TIMEOUT, 10); // 実行タイムアウトの秒数
curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, 10); // 接続タイムアウトの秒数
$body = curl_exec($curl); // レスポンスボディ取得 (失敗した場合false)
$code = curl_getinfo($curl, CURLINFO_HTTP_CODE); // レスポンスコード
$errno = curl_errno($curl); // エラーコード
$error = curl_error($curl); // エラー文字列
curl_close($curl);
オプション
curl_setopt_array で一括指定もできます。
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); // SSL証明書検証をしない
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); // curl_exec() 経由で応答データを直接取得できるようにする
curl_setopt($curl, CURLOPT_TIMEOUT, 10); // 実行タイムアウトの秒数
curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, 10); // 接続タイムアウトの秒数
curl_setopt($curl, CURLOPT_REFERER, 'https://example.com'); // リファラー
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true); // リダイレクトをたどる
curl_setopt($curl, CURLOPT_HTTPHEADER, array('Content-Type: application/json')); // リクエストヘッダー
curl_setopt($curl, CURLOPT_USERAGENT, 'Test UA'); // ユーザーエージェント
curl_setopt($curl, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1); // HTTP/1.1
curl_setopt($curl, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_2_0); // HTTP/2
レスポンスヘッダー取得
// レスポンスヘッダー取得 (['HTTP/1.1 200 OK', 'Date: ...', ...])
$headers = array();
curl_setopt($curl, CURLOPT_HEADERFUNCTION, function($curl, $header) use (&$headers) {
if (trim($header) !== '') $headers[] = trim($header);
return strlen($header);
});
// レスポンスヘッダー取得 (['Date' => ['...'], 'Content-Type' => ['text/html'], ...])
$headers = array();
curl_setopt($curl, CURLOPT_HEADERFUNCTION, function($curl, $header) use (&$headers) {
if (trim($header) !== '') {
$pair = explode(':', $header, 2);
if (count($pair) == 2) {
$headers[trim($pair[0])][] = trim($pair[1]);
}
}
return strlen($header);
});
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url); // URL
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); // curl_exec() 経由で応答データを直接取得できるようにする
curl_setopt($curl, CURLOPT_HEADER, true); // ヘッダーを出力
curl_setopt($curl, CURLOPT_TIMEOUT, 10); // 実行タイムアウトの秒数
curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, 10); // 接続タイムアウトの秒数
$response = curl_exec($curl); // レスポンス取得 (失敗した場合false)
$code = curl_getinfo($curl, CURLINFO_HTTP_CODE); // レスポンスコード
$headerSize = curl_getinfo($curl, CURLINFO_HEADER_SIZE); // ヘッダーサイズ
$errno = curl_errno($curl); // エラーコード
$error = curl_error($curl); // エラー文字列
curl_close($curl);
if ($response !== false) {
$header = trim(substr($response, 0, $headerSize)); // ヘッダー
$headerArray = explode("\r\n", $header); // ヘッダー (行ごとに分割)
$body = substr($response, $headerSize); // ボディ
}