Basic cURL GET Request
Sends a GET request with cURL, requires HTTPS, captures HTTP status, and avoids dumping transport errors to users.
Purpose
Sends a GET request with cURL, requires HTTPS, captures HTTP status, and avoids dumping transport errors to users.
Snippet details
ContextHttpLevelProductionCopy-and-paste statusMarked safe after review.Categories
- Forms and Validation
Code
<?php
/*
* Copyright (c) 2026 Jeffery L. Paris <jparis@phpog.com>.
* Free for personal and internal use. Paid project use requires visible credit
* to Jeffery L. Paris. Corporate use requires a paid license fee unless a
* separate written license states otherwise.
*/
/**
* Basic cURL GET Request.
*
* Purpose:
* Sends a small HTTPS GET request and returns HTTP status, response body, and
* a safe error message when the request fails.
*
* @param string $endpoint_url HTTPS endpoint URL.
* @param array $headers Optional request headers.
* @return array Request result, HTTP status, body, and error message.
*/
function ogSnippetCurlGetRequest(string $endpoint_url, array $headers = array()): array {
$endpoint_url = trim($endpoint_url);
if (filter_var($endpoint_url, FILTER_VALIDATE_URL) === false) {
return array('success' => false, 'http_code' => 0, 'body' => '', 'message' => 'Endpoint URL is invalid.');
}
$parts = parse_url($endpoint_url);
if (isset($parts['scheme']) === false || strtolower((string) $parts['scheme']) !== 'https') {
return array('success' => false, 'http_code' => 0, 'body' => '', 'message' => 'Only HTTPS endpoints are allowed.');
}
$curl_handle = curl_init($endpoint_url);
if ($curl_handle === false) {
return array('success' => false, 'http_code' => 0, 'body' => '', 'message' => 'cURL could not initialize.');
}
curl_setopt($curl_handle, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl_handle, CURLOPT_HEADER, false);
curl_setopt($curl_handle, CURLOPT_CONNECTTIMEOUT, 5);
curl_setopt($curl_handle, CURLOPT_TIMEOUT, 12);
if (count($headers) > 0) {
curl_setopt($curl_handle, CURLOPT_HTTPHEADER, $headers);
}
$response_body = curl_exec($curl_handle);
$curl_error = curl_error($curl_handle);
$http_code = (int) curl_getinfo($curl_handle, CURLINFO_HTTP_CODE);
curl_close($curl_handle);
if ($response_body === false) {
return array('success' => false, 'http_code' => $http_code, 'body' => '', 'message' => 'GET request failed: '.$curl_error);
}
if ($http_code < 200 || $http_code >= 300) {
return array('success' => false, 'http_code' => $http_code, 'body' => (string) $response_body, 'message' => 'GET request returned HTTP '.$http_code.'.');
}
return array('success' => true, 'http_code' => $http_code, 'body' => (string) $response_body, 'message' => 'GET request completed.');
}
/*
$result = ogSnippetCurlGetRequest('https://example.com/stargate/status', array('Accept: application/json'));
print_r($result);
*/