Skip to content
Simple PHP curl wrapper class
PHP Shell
Branch: master
Clone or download
anlutro fix hasData for non-post requests
the default value of the $data property is an empty array, which for
some encodings would be encoded into a non-empty string. this would
cause hasData to return true even for request types that are not meant
to send data, which again would trigger an if condition that calls
curl_setopt with CURLOPT_POSTFIELDS.

fixes #61
Latest commit a2809a2 Dec 14, 2018
Type Name Latest commit message Commit time
Failed to load latest commit information.
tests fix hasData for non-post requests Dec 14, 2018
.gitignore misc cleanup Apr 1, 2015
.travis.yml update travis config Oct 30, 2018
LICENSE misc cleanup Feb 9, 2015
composer.json phpunit 4 is the one with php5 support Jun 7, 2017
phpunit.xml improve tests, use php -S Jul 7, 2015 add phpunit to composer.json to make sure it can run everywhere Jun 7, 2017


Build Status Latest Stable Version Latest Unstable Version License

The smallest possible OOP wrapper for PHP's curl capabilities.

Note that this is not meant as a high-level abstraction. You should still know how "pure PHP" curl works, you need to know the curl options to set, and you need to know some HTTP basics.

If you're looking for a more user-friendly abstraction, check out Guzzle.


$ composer require anlutro/curl


$curl = new anlutro\cURL\cURL;

$response = $curl->get('');

// easily build an url with a query string
$url = $curl->buildUrl('', ['s' => 'curl']);
$response = $curl->get($url);

// the post, put and patch methods takes an array of POST data
$response = $curl->post($url, ['api_key' => 'my_key', 'post' => 'data']);

// add "json" to the start of the method to convert the data to a JSON string
// and send the header "Content-Type: application/json"
$response = $curl->jsonPost($url, ['post' => 'data']);

// if you don't want any conversion to be done to the provided data, for example
// if you want to post an XML string, add "raw" to the start of the method
$response = $curl->rawPost($url, '<?xml version...');

// raw request are also the easiest way to upload files
$file = curl_file_create('/path/to/file');
$response = $curl->rawPost($url, ['file' => $file]);

// a response object is returned
var_dump($response->statusCode); // response status code integer (for example, 200)
var_dump($response->statusText); // full response status (for example, '200 OK')
echo $response->body;
var_dump($response->headers); // array of headers
var_dump($response->info); // array of curl info

If you need to send headers or set cURL options you can manipulate a request object directly. send() finalizes the request and returns the result.

// newRequest, newJsonRequest and newRawRequest returns a Request object
$request = $curl->newRequest('post', $url, ['foo' => 'bar'])
	->setHeader('Accept-Charset', 'utf-8')
	->setHeader('Accept-Language', 'en-US')
	->setOption(CURLOPT_CAINFO, '/path/to/cert')
$response = $request->send();

You can also use setHeaders(array $headers) and setOptions(array $options) to replace all the existing options.

Note that some curl options are reset when you call send(). Look at the source code of the method cURL::prepareMethod for a full overview of which options are overwritten.

HTTP basic authentication:

$request = $curl->newRequest('post', $url, ['foo' => 'bar'])


The package comes with a facade you can use if you prefer the static method calls over dependency injection.

You do not need to add a service provider.

Optionally, add 'cURL' => 'anlutro\cURL\Laravel\cURL' to the array of aliases in config/app.php.

Replace $curl-> with cURL:: in the examples above.


Open an issue on GitHub if you have any problems or suggestions.


The contents of this repository is released under the MIT license.

You can’t perform that action at this time.