PHP Curl Class makes it easy to send HTTP requests and integrate with web APIs

Overview

PHP Curl Class: HTTP requests made easy

PHP Curl Class makes it easy to send HTTP requests and integrate with web APIs.

PHP Curl Class screencast



Installation

To install PHP Curl Class, simply:

$ composer require php-curl-class/php-curl-class

For latest commit version:

$ composer require php-curl-class/php-curl-class @dev

Requirements

PHP Curl Class works with PHP 7.0, 7.1, 7.2, 7.3, 7.4, and 8.0.

Quick Start and Examples

More examples are available under /examples.

require __DIR__ . '/vendor/autoload.php';

use Curl\Curl;

$curl = new Curl();
$curl->get('https://www.example.com/');

if ($curl->error) {
    echo 'Error: ' . $curl->errorCode . ': ' . $curl->errorMessage . "\n";
} else {
    echo 'Response:' . "\n";
    var_dump($curl->response);
}
// https://www.example.com/search?q=keyword
$curl = new Curl();
$curl->get('https://www.example.com/search', [
    'q' => 'keyword',
]);
$curl = new Curl();
$curl->post('https://www.example.com/login/', [
    'username' => 'myusername',
    'password' => 'mypassword',
]);
$curl = new Curl();
$curl->setBasicAuthentication('username', 'password');
$curl->setUserAgent('MyUserAgent/0.0.1 (+https://www.example.com/bot.html)');
$curl->setReferrer('https://www.example.com/url?url=https%3A%2F%2Fwww.example.com%2F');
$curl->setHeader('X-Requested-With', 'XMLHttpRequest');
$curl->setCookie('key', 'value');
$curl->get('https://www.example.com/');

if ($curl->error) {
    echo 'Error: ' . $curl->errorCode . ': ' . $curl->errorMessage . "\n";
} else {
    echo 'Response:' . "\n";
    var_dump($curl->response);
}

var_dump($curl->requestHeaders);
var_dump($curl->responseHeaders);
$curl = new Curl();
$curl->setOpt(CURLOPT_FOLLOWLOCATION, true);
$curl->get('https://shortn.example.com/bHbVsP');
$curl = new Curl();
$curl->put('https://api.example.com/user/', [
    'first_name' => 'Zach',
    'last_name' => 'Borboa',
]);
$curl = new Curl();
$curl->patch('https://api.example.com/profile/', [
    'image' => '@path/to/file.jpg',
]);
$curl = new Curl();
$curl->patch('https://api.example.com/profile/', [
    'image' => new CURLFile('path/to/file.jpg'),
]);
$curl = new Curl();
$curl->delete('https://api.example.com/user/', [
    'id' => '1234',
]);
// Enable all supported encoding types and download a file.
$curl = new Curl();
$curl->setOpt(CURLOPT_ENCODING , '');
$curl->download('https://www.example.com/file.bin', '/tmp/myfile.bin');
// Case-insensitive access to headers.
$curl = new Curl();
$curl->download('https://www.example.com/image.png', '/tmp/myimage.png');
echo $curl->responseHeaders['Content-Type'] . "\n"; // image/png
echo $curl->responseHeaders['CoNTeNT-TyPE'] . "\n"; // image/png
// Manual clean up.
$curl->close();
// Example access to curl object.
curl_set_opt($curl->curl, CURLOPT_USERAGENT, 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1');
curl_close($curl->curl);
require __DIR__ . '/vendor/autoload.php';

use Curl\MultiCurl;

// Requests in parallel with callback functions.
$multi_curl = new MultiCurl();

$multi_curl->success(function($instance) {
    echo 'call to "' . $instance->url . '" was successful.' . "\n";
    echo 'response:' . "\n";
    var_dump($instance->response);
});
$multi_curl->error(function($instance) {
    echo 'call to "' . $instance->url . '" was unsuccessful.' . "\n";
    echo 'error code: ' . $instance->errorCode . "\n";
    echo 'error message: ' . $instance->errorMessage . "\n";
});
$multi_curl->complete(function($instance) {
    echo 'call completed' . "\n";
});

$multi_curl->addGet('https://www.google.com/search', [
    'q' => 'hello world',
]);
$multi_curl->addGet('https://duckduckgo.com/', [
    'q' => 'hello world',
]);
$multi_curl->addGet('https://www.bing.com/search', [
    'q' => 'hello world',
]);

$multi_curl->start(); // Blocks until all items in the queue have been processed.

More examples are available under /examples.

Available Methods

Curl::__construct($base_url = null)
Curl::__destruct()
Curl::__get($name)
Curl::_fastDownload($url, $filename, $connections = 4) {
Curl::attemptRetry()
Curl::beforeSend($callback)
Curl::buildPostData($data)
Curl::call()
Curl::close()
Curl::complete($callback)
Curl::delete($url, $query_parameters = [], $data = [])
Curl::disableTimeout()
Curl::download($url, $mixed_filename)
Curl::error($callback)
Curl::exec($ch = null)
Curl::execDone()
Curl::get($url, $data = [])
Curl::getAttempts()
Curl::getBeforeSendCallback()
Curl::getCompleteCallback()
Curl::getCookie($key)
Curl::getCurl()
Curl::getCurlErrorCode()
Curl::getCurlErrorMessage()
Curl::getDownloadCompleteCallback()
Curl::getDownloadFileName()
Curl::getErrorCallback()
Curl::getErrorCode()
Curl::getErrorMessage()
Curl::getFileHandle()
Curl::getHttpErrorMessage()
Curl::getHttpStatusCode()
Curl::getId()
Curl::getInfo($opt = null)
Curl::getJsonDecoder()
Curl::getOpt($option)
Curl::getRawResponse()
Curl::getRawResponseHeaders()
Curl::getRemainingRetries()
Curl::getRequestHeaders()
Curl::getResponse()
Curl::getResponseCookie($key)
Curl::getResponseCookies()
Curl::getResponseHeaders()
Curl::getRetries()
Curl::getRetryDecider()
Curl::getSuccessCallback()
Curl::getUrl()
Curl::getXmlDecoder()
Curl::head($url, $data = [])
Curl::isChildOfMultiCurl()
Curl::isCurlError()
Curl::isError()
Curl::isHttpError()
Curl::options($url, $data = [])
Curl::patch($url, $data = [])
Curl::post($url, $data = '', $follow_303_with_post = false)
Curl::progress($callback)
Curl::put($url, $data = [])
Curl::removeHeader($key)
Curl::reset()
Curl::search($url, $data = [])
Curl::setBasicAuthentication($username, $password = '')
Curl::setConnectTimeout($seconds)
Curl::setCookie($key, $value)
Curl::setCookieFile($cookie_file)
Curl::setCookieJar($cookie_jar)
Curl::setCookieString($string)
Curl::setCookies($cookies)
Curl::setDefaultDecoder($mixed = 'json')
Curl::setDefaultJsonDecoder()
Curl::setDefaultTimeout()
Curl::setDefaultUserAgent()
Curl::setDefaultXmlDecoder()
Curl::setDigestAuthentication($username, $password = '')
Curl::setFile($file)
Curl::setHeader($key, $value)
Curl::setHeaders($headers)
Curl::setInterface($interface)
Curl::setJsonDecoder($mixed)
Curl::setMaxFilesize($bytes)
Curl::setOpt($option, $value)
Curl::setOpts($options)
Curl::setPort($port)
Curl::setProxy($proxy, $port = null, $username = null, $password = null)
Curl::setProxyAuth($auth)
Curl::setProxyTunnel($tunnel = true)
Curl::setProxyType($type)
Curl::setRange($range)
Curl::setReferer($referer)
Curl::setReferrer($referrer)
Curl::setRetry($mixed)
Curl::setTimeout($seconds)
Curl::setUrl($url, $mixed_data = '')
Curl::setUserAgent($user_agent)
Curl::setXmlDecoder($mixed)
Curl::success($callback)
Curl::unsetHeader($key)
Curl::unsetProxy()
Curl::verbose($on = true, $output = 'STDERR')
MultiCurl::__construct($base_url = null)
MultiCurl::__destruct()
MultiCurl::addCurl(Curl $curl)
MultiCurl::addDelete($url, $query_parameters = [], $data = [])
MultiCurl::addDownload($url, $mixed_filename)
MultiCurl::addGet($url, $data = [])
MultiCurl::addHead($url, $data = [])
MultiCurl::addOptions($url, $data = [])
MultiCurl::addPatch($url, $data = [])
MultiCurl::addPost($url, $data = '', $follow_303_with_post = false)
MultiCurl::addPut($url, $data = [])
MultiCurl::addSearch($url, $data = [])
MultiCurl::beforeSend($callback)
MultiCurl::close()
MultiCurl::complete($callback)
MultiCurl::disableTimeout()
MultiCurl::error($callback)
MultiCurl::getOpt($option)
MultiCurl::removeHeader($key)
MultiCurl::setBasicAuthentication($username, $password = '')
MultiCurl::setConcurrency($concurrency)
MultiCurl::setConnectTimeout($seconds)
MultiCurl::setCookie($key, $value)
MultiCurl::setCookieFile($cookie_file)
MultiCurl::setCookieJar($cookie_jar)
MultiCurl::setCookieString($string)
MultiCurl::setCookies($cookies)
MultiCurl::setDigestAuthentication($username, $password = '')
MultiCurl::setFile($file)
MultiCurl::setHeader($key, $value)
MultiCurl::setHeaders($headers)
MultiCurl::setInterface($interface)
MultiCurl::setJsonDecoder($mixed)
MultiCurl::setOpt($option, $value)
MultiCurl::setOpts($options)
MultiCurl::setPort($port)
MultiCurl::setProxies($proxies)
MultiCurl::setProxy($proxy, $port = null, $username = null, $password = null)
MultiCurl::setProxyAuth($auth)
MultiCurl::setProxyTunnel($tunnel = true)
MultiCurl::setProxyType($type)
MultiCurl::setRange($range)
MultiCurl::setRateLimit($rate_limit)
MultiCurl::setReferer($referer)
MultiCurl::setReferrer($referrer)
MultiCurl::setRetry($mixed)
MultiCurl::setTimeout($seconds)
MultiCurl::setUrl($url, $mixed_data = '')
MultiCurl::setUserAgent($user_agent)
MultiCurl::setXmlDecoder($mixed)
MultiCurl::start()
MultiCurl::success($callback)
MultiCurl::unsetHeader($key)
MultiCurl::unsetProxy()
MultiCurl::verbose($on = true, $output = STDERR)

Security

See SECURITY for security considerations.

Troubleshooting

See TROUBLESHOOTING for troubleshooting.

Run Tests

To run tests:

$ git clone https://github.com/php-curl-class/php-curl-class.git
$ cd php-curl-class/
$ composer update
$ ./tests/run.sh

To run select tests:

$ git clone https://github.com/php-curl-class/php-curl-class.git
$ cd php-curl-class/
$ composer update
$ ./tests/run.sh --filter=keyword

To test all PHP versions in containers:

$ git clone https://github.com/php-curl-class/php-curl-class.git
$ cd php-curl-class/
$ ./tests/test_all.sh

Contribute

  1. Check for open issues or open a new issue to start a discussion around a bug or feature.
  2. Fork the repository on GitHub to start making your changes.
  3. Write one or more tests for the new feature or that expose the bug.
  4. Make code changes to implement the feature or fix the bug.
  5. Send a pull request to get your changes merged and published.
Comments
  • A few Fixes and improvements. (Temp file, Header setting/output, JSON encodeing)

    A few Fixes and improvements. (Temp file, Header setting/output, JSON encodeing)

    This pull contains a number of improvements:

    • An anonymous function to handle writing to php://memory to mitigate (https://bugs.php.net/bug.php?id=43468).
    • Support for PECL-style Header output (multi-dimensional associative arrays).
    • Support for setting a group of headers.
    • Support for setting Headers in the PECL-style (multi-dimensional associative arrays).
    • Support for automatic JSON encoding of the POST contents if the 'Content-Type' is application/json.
    • Supports URLs with place-holders (Restful URLs).
    • Added methods:
      • setRequestType() - Sets the CURLOPT_CUSTOMREQUEST to Uppercase Request Type, and sets CURLOPT_HTTPGET, CURLOPT_POST, CURLOPT_NOBODY depending on the type.
      • setURL() - Sets the base_url to the provided URL with optional place-holder substitution, sets url to the base_url with optional GET request appended, sets CURLOPT_URL to the resulting url.
      • buildBaseURL() - Performs place-holder substitution on a provided URL with the provided $url_subs.
      • normalizeContentType() - Filters a set of Headers and resolves a Lower Case normalized representation of the Content Type (xml/json at this time).
      • more.
    Won't Fix (Obsolete) 
    opened by thebeline 17
  • Supplied resource is not a valid cURL handle resource

    Supplied resource is not a valid cURL handle resource

    Got this error with last commits on master branch. Last commit at this moment (42d84d7). Use MultiCurl with proxy and MultiCurl::stop() method.

    curl_multi_info_read(): supplied resource is not a valid cURL handle resource {"exception":"[object] (ErrorException(code: 0): curl_multi_info_read(): supplied resource is not a valid cURL handle resource at /var/www/html/vendor/php-curl-class/php-curl-class/src/Curl/MultiCurl.php:998)"}

    Accepted 
    opened by Allyans3 16
  • Support post-redirect-get requests.

    Support post-redirect-get requests.

    Post-redirect-get is a workflow where the an user submits data using a POST request (on a login page for example) and receive a "303: See other" response in return (for example, to be redirected to its home page after a successful login), redirection which is supposed to be followed using GET requests.

    This workflow is used by lots of websites, and is actually consistent with the HTTP/1.1 specs.

    Using the cURL php extension, it is possible to force requests resulting from a redirect after a POST request to also be done using using POST. It is achieved by setting the CURLOPT_CUSTOMREQUEST option to "POST" (source). And this is what php-curl-class currently does, preventing post-redirect-get requests:

    public function post($url, $data = array())
    {
        if (is_array($url)) {
            $data = $url;
            $url = $this->baseUrl;
        }
    
        $this->setURL($url);
        $this->setOpt(CURLOPT_CUSTOMREQUEST, 'POST');
        $this->setOpt(CURLOPT_POST, true);
        $this->setOpt(CURLOPT_POSTFIELDS, $this->buildPostData($data));
        return $this->exec();
    }
    

    Fixing this is quite easy, we just need to reset the CURLOPT_CUSTOMREQUEST option by setting it to null (the request will still be a POST due to the CURLOPT_POST option). One downside though: before PHP 5.5.11 (april 2014), it was not possible to reset this field (see this patch).

    Accepted 
    opened by Sigill 14
  • Add ability to retry requests

    Add ability to retry requests

    Example usage:

    $curl = new Curl();
    $curl->setRetry(function($instance) {
        // Retry when request times out.
        return $instance->retries < 3 && $instance->error === CURLE_OPERATION_TIMEOUTED;
    });
    

    #200

    Fixed 
    opened by zachborboa 12
  • Response parsing and header parsing should depend on flags

    Response parsing and header parsing should depend on flags

    A user may wish to disable the XML parsing, since when downloading to a file, such parsing shouldn't do anything, since rawResponse wouldn't contain a string anyway.

    Also should be able to disable XML or JSON parsing by giving null as a handler.

    Accepted 
    opened by mivanov93 11
  • Bug Fix - unsetHeader

    Bug Fix - unsetHeader

    There has a bug in unsetHeader()


    The unsetHeader bad work, for example

    $curl->setHeader('Host','example.com'); $curl->unsetHeader('Host'); $curl->get('http://127.0.0.1/');


    This request is make with Header "Host" = '' (empty string), because unsetHeader bad work

    with the my fix the header 'Host' with be deleted and curl auto-retrive the right header. horever is already possible make request with header 'Host' = '' (empty string) with $curl->setHeader('Host', '' );

    also remove a bad comment about fuction

    • \* @return string
      
      in setHeader()
    Accepted Fixed 
    opened by KTP95 10
  • why would my response be empty?

    why would my response be empty?

    What is the expected behavior? return a response

    What is the actual behavior? the response is always empty, but rawresponse is not

    What steps will reproduce the problem? i am using it in the most stripped down basic usecase. just like in your examples. But the response is always empty, even tho the rawresponse is not. the response is a correctly formatted json. no errors given.

    Code:

    $curl->response
    
    Needs More Info 
    opened by pixelpaulaus 9
  • Set CURLOPT_HTTPHEADER influence the next curl post request.

    Set CURLOPT_HTTPHEADER influence the next curl post request.

        Hello, i have the following questions.
        I send the first request with CURLOPT_HTTPHEADER and this value set Content-Type is multipart/form-data.
        
        `$ch = curl_init();`
        `curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type:multipart/form-data'));`
        `curl_setopt($ch, CURLOPT_URL, 'http://www.baidu.com');`
        `curl_setopt($ch, CURLOPT_POST, true);`
        `curl_exec($ch);`
        `curl_close($ch);`
    
        The next curl post request i use php-curl-class and not set CURLOPT_HTTPHEADER, but the server cannot receive the data.
    
        `$curl = new \Curl\Curl();`
        `$curl->post([server_host], array('name'=>'name'));`
        `var_dump($curl1->response);// output array(0) { }`
        `exit;`
    
        If i don't use php-curl-class or use other classlib the server can right receive the data.
    
        `$ch2 = curl_init();`
        `curl_setopt($ch2, CURLOPT_URL, [server_host]);`
        `curl_setopt($ch2, CURLOPT_POST, true);`
        `curl_setopt($ch2, CURLOPT_POSTFIELDS, array('name'=>'name'));`
        `curl_exec($ch2);// output {"name":"name"}`
        `curl_close($ch2);`
        `exit;`
    
        No matter use which kinds of method, the second request header Content-Type value both is multipart/form-data, but use the php-curl-class can't receive the data.
    
    Needs More Info 
    opened by yinfuyuan 9
  • File Upload w/o CURLFile Class in PHP Version < 5.5.0 don´t work

    File Upload w/o CURLFile Class in PHP Version < 5.5.0 don´t work

    If the CURLFile Class doesn´t exists, the class_exists call in Curl::buildPostData (Line: 155) produce a fatal error, cause of the missing 2nd parameter "autoload".

    opened by PhilippGratz 9
  • Volume fixes

    Volume fixes

    A couple of fixes for downloads of "volume"

    1. I noticed that $mc = new MultiCurl; unset($mc); does not call __destruct (in fact, $c = new Curl; unser($c); doesn't either) as the $ch is still referenced by curl(), etc, so, for convenience, I added autoClose that will automatically call $ch->close(), which will destruct the objects and free up memory consumed by them.
    2. When calling many downloads, I wanted to be able to manage the concurrency of the downloads, so I added concurrency(). Now, only X downloads will process at once. This manages an internal queue, and it will process all by default (concurrency of 0).
    3. Also when managing many downloads (think, thousands) I hit a file pointer ceiling. I mitigated this by deferring the creating of the file pointers until initHandle() is called, which will stay within the concurrency limits.

    Hope this finds you well.

    opened by thebeline 8
  • Rate limiter on multi_curl()

    Rate limiter on multi_curl()

    Often times API or websites rate limits certain amounts of requests per minute. In multi_curl() this causes problem. A built in rate limiter would be extremely useful in such cases. Guzzle has something called guzzle-rate-limiter-middleware

    Probably will be like:

    MultiCurl::perSecond(3); // Max. 3 requests per second
    
    MultiCurl::perMinute(5); // Max. 5 requests per minute
    
    Accepted Fixed 
    opened by Dibbyo456 7
  • Base class for Curl and MultiCurl

    Base class for Curl and MultiCurl

    What is the expected behavior? Having some base class that will keep shared methods so Curl and the MuliCurl classes will extend it.

    What is the actual behavior? The Curl and the MultiCurl haveing lots of methods which are exactly the same.

    What steps will reproduce the problem?

    Code:

    
    
    Accepted 
    opened by armanist 0
  • getCookie raw vs decoded name/value

    getCookie raw vs decoded name/value

    What is the expected behavior?

    getCookie() : expect arg to accept a decoded name expect the return value to be decoded

    getCookies() expect decoded names/values

    responseCookies public property : expect decoded names/values

    What is the actual behavior?

    must pass an encoded name to getCookie() and it returns a raw/encoded value

    What steps will reproduce the problem?

    response headers include

    Set-Cookie: dingus=foo%3Bbar; path=/
    Set-Cookie: a%3Bb=foo%3Bbar; path=/
    

    Code:

    $curl->getCookie('dingus') // returns "foo%3Bbar"   I would expect "foo;bar"
    $curl->getCookie('a;b'); // returns null, I would expect "foo;bar"
    $curl->getCookie('a%3Bb'); // returns "foo%3Bbar"  -> ugh
    

    likewise, I would expect getCookies (and public responseCookies property) to return array of decoded keys/values

    feature or bug?

    Needs More Info 
    opened by bkdotcom 5
  • Improve error control

    Improve error control

    I am missing a better error control on Curl class. May be, having the posibility to decorate the class with some methods to control errors and throw the needed exceptions. That would not change the class behaviour and would add a good feature. Do you think it could be interesting for the project?

    opened by gotardo 6
Releases(9.12.5)
Online tool to convert `curl` requests to Laravel `Http` requests

curl Converter Another bit of automation from Shift to convert curl requests to Laravel Http requests. This project is a WIP. You may follow along wit

Laravel Shift 66 Dec 17, 2022
🐼 Framework agnostic package using asynchronous HTTP requests and PHP generators to load paginated items of JSON APIs into Laravel lazy collections.

Framework agnostic package using asynchronous HTTP requests and generators to load paginated items of JSON APIs into Laravel lazy collections.

Andrea Marco Sartori 61 Dec 3, 2022
Zenscrape package is a simple PHP HTTP client-provider that makes it easy to parsing site-pages

Zenscrape package is a simple PHP HTTP client-provider that makes it easy to parsing site-pages

Andrei 3 Jan 17, 2022
Provides an easy interface for performing Hyper-Text Transfer Protocol (HTTP) requests

laminas-http provides the HTTP message abstraction used by laminas-mvc, and also provides an extensible, adapter-driven HTTP client library.

Laminas Project 33 Aug 27, 2022
Simple PHP curl wrapper class

php-curl 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

Andreas Lutro 243 Dec 5, 2022
A Chainable, REST Friendly, PHP HTTP Client. A sane alternative to cURL.

Httpful Httpful is a simple Http Client library for PHP 7.2+. There is an emphasis of readability, simplicity, and flexibility – basically provide the

Nate Good 1.7k Dec 21, 2022
Simple HTTP cURL client for PHP 7.1+ based on PSR-18

Simple HTTP cURL client for PHP 7.1+ based on PSR-18 Installation composer require sunrise/http-client-curl QuickStart composer require sunrise/http-f

Sunrise // PHP 15 Sep 5, 2022
Requests for PHP is a humble HTTP request library. It simplifies how you interact with other sites and takes away all your worries.

Requests for PHP Requests is a HTTP library written in PHP, for human beings. It is roughly based on the API from the excellent Requests Python librar

null 3.5k Dec 31, 2022
Requests for PHP is a humble HTTP request library. It simplifies how you interact with other sites and takes away all your worries.

Requests for PHP Requests is a HTTP library written in PHP, for human beings. It is roughly based on the API from the excellent Requests Python librar

null 3.5k Dec 31, 2022
Application for logging HTTP and DNS Requests

Request Logger Made by Adam Langley ( https://twitter.com/adamtlangley ) What is it? Request logger is a free and open source utility for logging HTTP

null 13 Nov 28, 2022
librestful is a virion for PocketMine servers that make easier, readable code and for async http requests.

librestful is a virion for PocketMine servers that make easier, readable code for async rest requests.

RedMC Network 17 Oct 31, 2022
↪️ Bypass for PHP creates a custom HTTP Server to return predefined responses to client requests

Bypass for PHP provides a quick way to create a custom HTTP Server to return predefined responses to client requests.Useful for tests with Pest PHP or PHPUnit.

CiaReis 101 Dec 1, 2022
Requests - a HTTP library written in PHP, for human beings

Requests is a HTTP library written in PHP, for human beings. It is roughly based on the API from the excellent Requests Python library. Requests is ISC Licensed (similar to the new BSD license) and has no dependencies, except for PHP 5.6+.

WordPress 3.5k Jan 6, 2023
Express.php is a new HTTP - Server especially made for RESTful APIs written in PHP.

express.php Express.php is a new HTTP - Server especially made for RESTful APIs written in PHP. Features Fast The Library is handles requests fast and

null 5 Aug 19, 2022
Declarative HTTP Clients using Guzzle HTTP Library and PHP 8 Attributes

Waffler How to install? $ composer require waffler/waffler This package requires PHP 8 or above. How to test? $ composer phpunit Quick start For our e

Waffler 3 Aug 26, 2022
PHP Curl ile letgo api kütüphanesi oluşturuldu. php ile letgo giriş yap.

Kendi LETGO API ile işlemler gerçekleştirelim. // email işlemleri $server = 'imap.gmail.com'; $user = '[email protected]'; $pass = 'password'; $port = 9

Görkem Bayraktar 2 Nov 3, 2022
The best php curl library.

中文文档 About Implemented by using php-curl internal io event with high performance,high universality,high extensibility which especially suitable for ma

Ares 431 Dec 12, 2022
Custom PHP curl library for the Laravel 5 framework - developed by Ixudra

ixudra/curl Custom PHP cURL library for the Laravel 4 or 5 framework - developed by Ixudra. The package provides an easy interface for sending cURL re

Jan Oris 556 Jan 6, 2023
PHP cURL for feed Instagram Graph API

php-curl-instagram-graph PHP cURL for feed Instagram Graph API Script made based on the new (2020) Instagram API that requires authorization token gen

null 12 Apr 13, 2022