Flexible wrapper class for PHP cURL extension
See php.net/curl for more information about the libcurl extension for PHP.
It's a fairly simple library, so if you want something more powerful take a look at Guzzle.
php composer.phar require svyatov/curlwrapper '~1.3'
Just grab the latest release.
try {
$curl = new CurlWrapper();
} catch (CurlWrapperException $e) {
echo $e->getMessage();
}
The CurlWrapper object supports 5 types of requests: HEAD, GET, POST, PUT, and DELETE. You must specify an url to request and optionally specify an associative array or query string of variables to send along with it.
$response = $curl->head($url, $params);
$response = $curl->get($url, $params);
$response = $curl->post($url, $params);
$response = $curl->put($url, $params);
$response = $curl->delete($url, $params);
To use a custom request methods, you can call the request
method:
$response = $curl->request($url, 'ANY_CUSTOM_REQUEST_TYPE', $params);
Examples:
$response = $curl->get('google.com?q=test');
$response = $curl->get('google.com?q=test', array('some_variable' => 'some_value'));
// CurlWrapper will append '&some_variable=some_value' to the url
$response = $curl->post('test.com/posts', array('title' => 'Test', 'body' => 'This is a test'));
All requests return response body as is or throw a CurlWrapperException if an error occurred.
Some times you need to send not encoded POST params, but a raw JSON or other raw data format.
$response = $curl->rawPost($url, $jsonData);
$response = $curl->rawPut($url, 'raw random data');
Note that data is sending as as, without any URL-encoding manipulation. Keep that in mind.
You might also need to change the content type header for those types of request:
$curl->addHeader('Content-Type', 'text/plain');
// or
$curl->addHeader('Content-Type', 'application/json');
// and then
$response = $curl->rawPost($url, $jsonData);
It depends on API server-side you are working with.
$info = $curl->getTransferInfo();
This will give you associative array with following keys:
url
- Last effective URLcontent_type
- Content-Type: of downloaded object, NULL indicates server did not send valid Content-Type: headerhttp_code
- Last received HTTP codeheader_size
- Total size of all headers receivedrequest_size
- Total size of issued requests, currently only for HTTP requestsfiletime
- Remote time of the retrieved document, if -1 is returned the time of the document is unknownssl_verify_result
- Result of SSL certification verification requested by setting CURLOPT_SSL_VERIFYPEERredirect_count
- Number of redirects it went through if CURLOPT_FOLLOWLOCATION was settotal_time
- Total transaction time in seconds for last transfernamelookup_time
- Time in seconds until name resolving was completeconnect_time
- Time in seconds it took to establish the connectionpretransfer_time
- Time in seconds from start until just before file transfer beginssize_upload
- Total number of bytes uploadedsize_download
- Total number of bytes downloadedspeed_download
- Average download speedspeed_upload
- Average upload speeddownload_content_length
- content-length of download, read from Content-Length: fieldupload_content_length
- Specified size of uploadstarttransfer_time
- Time in seconds until the first byte is about to be transferredredirect_time
- Time in seconds of all redirection steps before final transaction was startedcertinfo
- There is official description for this field yetrequest_header
- The request string sent. For this to work, add the CURLINFO_HEADER_OUT option
You can also easily fetch any single piece of this array:
$httpCode = $curl->getTransferInfo('http_code');
To maintain a session across requests and cookies support you must set file's name where cookies to store:
$curl->setCookieFile('some_file_name.txt');
This file must be writeble or the CurlWrapperException will be thrown.
You can easily set the referer, user-agent, timeout and whether or not follow redirects:
$curl->setReferer('http://google.com');
$curl->setUserAgent('some user agent string');
$curl->setTimeout(15); // seconds
$curl->setFollowRedirects(true); // to follow redirects
You can set a username and password for use in HTTP basic auth:
$curl->setAuthType();
$curl->setAuthCredentials('username', 'password');
You can set custom headers to send with the request:
$curl->addHeader('Host', '98.52.78.243');
$curl->addHeader('Some-Custom-Header', 'Some Custom Value');
Or use a single array:
$curl->addHeader(array('Host'=>'98.52.78.243', 'Some-Custom-Header'=>'Some Custom Value'));
You can set/override any cURL option (see the curl_setopt documentation for a list of them):
$curl->addOption(CURLOPT_AUTOREFERER, true);
-
v1.3.0
new
added setAuthType() and setAuthCredentials() methods for HTTP basic authentication -
v1.2.0
new
added rawPost() and rawPut() methods for POST/PUT requests with raw payloadnew
added setFollowRedirects() method for quick access to cURL CURLOPT_FOLLOWLOCATION option
- Fork it
- Create your feature branch (
git checkout -b my-new-feature
) - Commit your changes (
git commit -am 'Added some feature'
) - Push to the branch (
git push origin my-new-feature
) - Create new Pull Request