Skip to content
← Back to Snippets
Code

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);
*/