shichen b6c5ecc67a init hace 10 meses
..
tests b6c5ecc67a init hace 10 meses
.gitignore b6c5ecc67a init hace 10 meses
.travis.yml b6c5ecc67a init hace 10 meses
Curl.php b6c5ecc67a init hace 10 meses
README.md b6c5ecc67a init hace 10 meses
codeception.yml b6c5ecc67a init hace 10 meses
composer.json b6c5ecc67a init hace 10 meses
composer.lock b6c5ecc67a init hace 10 meses

README.md

yii2-curl extension

Latest Stable Version Latest Master Build Test Coverage Total Downloads License

Easy working cURL extension for Yii2, including RESTful support:

  • POST
  • GET
  • HEAD
  • PUT
  • PATCH
  • DELETE
  • OPTIONS

Requirements

  • Yii2
  • PHP >=7.2.0 || 8.0.1
  • ext-curl, ext-json, and php-curl installed

Installation

The preferred way to install this extension is through composer.

composer require --prefer-dist linslin/yii2-curl "*"

Usage

Once the extension is installed, simply use it in your code. The following example shows you how to handling a simple GET Request.

use linslin\yii2\curl;
$curl = new curl\Curl();

//get http://example.com/
$response = $curl->get('http://example.com/');

if ($curl->errorCode === null) {
   echo $response;
} else {
     // List of curl error codes here https://curl.haxx.se/libcurl/c/libcurl-errors.html
    switch ($curl->errorCode) {
    
        case 6:
            //host unknown example
            break;
    }
} 
// GET request with GET params
// http://example.com/?key=value&scondKey=secondValue
$curl = new curl\Curl();
$response = $curl->setGetParams([
        'key' => 'value',
        'secondKey' => 'secondValue'
     ])
     ->get('http://example.com/');
// POST URL form-urlencoded 
$curl = new curl\Curl();
$response = $curl->setPostParams([
        'key' => 'value',
        'secondKey' => 'secondValue'
     ])
     ->post('http://example.com/');
// POST RAW JSON
$curl = new curl\Curl();
$response = $curl->setRawPostData(
     json_encode[
        'key' => 'value',
        'secondKey' => 'secondValue'
     ])
     ->post('http://example.com/');
// POST RAW JSON and auto decode JSON respawn by setting raw = true. 
// This is usefull if you expect an JSON response and want to autoparse it. 
$curl = new curl\Curl();
$response = $curl->setRawPostData(
     json_encode[
        'key' => 'value',
        'secondKey' => 'secondValue'
     ])
     ->post('http://example.com/', true);
     
// JSON decoded response by parsing raw = true in to ->post().
var_dump($response);
// POST RAW XML
$curl = new curl\Curl();
$response = $curl->setRawPostData('<?xml version="1.0" encoding="UTF-8"?><someNode>Test</someNode>')
     ->post('http://example.com/');
// POST with special headers
$curl = new curl\Curl();
$response = $curl->setPostParams([
        'key' => 'value',
        'secondKey' => 'secondValue'
     ])
     ->setHeaders([
        'Custom-Header' => 'user-b'
     ])
     ->post('http://example.com/');
// POST JSON with body string & special headers
$curl = new curl\Curl();

$params = [
    'key' => 'value',
    'secondKey' => 'secondValue'
];

$response = $curl->setRequestBody(json_encode($params))
     ->setHeaders([
        'Content-Type' => 'application/json',
        'Content-Length' => strlen(json_encode($params))
     ])
     ->post('http://example.com/');
// Avanced POST request with curl options & error handling
$curl = new curl\Curl();

$params = [
    'key' => 'value',
    'secondKey' => 'secondValue'
];

$response = $curl->setRequestBody(json_encode($params))
     ->setOption(CURLOPT_ENCODING, 'gzip')
     ->post('http://example.com/');
     
// List of status codes here http://en.wikipedia.org/wiki/List_of_HTTP_status_codes
switch ($curl->responseCode) {

    case 'timeout':
        //timeout error logic here
        break;
        
    case 200:
        //success logic here
        break;

    case 404:
        //404 Error logic here
        break;
}

//list response headers
var_dump($curl->responseHeaders);

Testing

  • Run codeception tests with vendor/bin/codecept run in repository root dir. Run codeception with clover report XDEBUG_MODE=coverage vendor/bin/codecept run --coverage-xml ./../../build/logs/clover.xml. On windows run vendor\bin\codecept.bat run. On windows with clover report run vendor\bin\codecept.bat run --coverage-xml ./../../build/logs/clover.xml.

Changelog


Release 1.5.0 - Changelog
Release 1.4.0 - Changelog
Release 1.3.0 - Changelog
  • Fixed HTTP-Method parsing on PATCH request.
  • Updated DocBlocks + code refactoring.
  • Removed deprecated PHP Version support. Minimum PHP Version is now 7.1.3. Please use version "linslin/yii2-curl 1.2.1" - https://github.com/linslin/Yii2-Curl/releases/tag/1.2.1 if you need PHP 5.4+ support.
Release 1.2.2 - Changelog
  • Added some new cURL examples into readme.md.
Release 1.2.1 - Changelog
  • Added setRawPostData([mixed]) [this] which allows you to post any data format.
Release 1.2.0 - Changelog
  • Added unsetHeader([string header]) [this] helper which allows you to unset one specific header.
  • Added setHeader([string header, string value]) [this] helper which allows you to set one specific header.
  • Added getRequestHeaders() [array] helper which returns all request headers as an array.
  • Added getRequestHeader([string headerKey]) [string|null] helper which returns a specific request header as an string.
  • Added new test cases for getRequestHeaders() and getRequestHeader().
  • Readme adjustments.
Release 1.1.3 - Changelog
  • Fixed issue with patch request.
  • Fully added functionalTests for 100% coverage.
Release 1.1.2 - Changelog
Release 1.1.1 - Changelog
  • Fixed wrong parameter parsing into _httpRequest() (thanks to yemexx1)
  • Added JSON decode functions tests (thanks to yemexx1)
Release 1.1.0 - Changelog
Release 1.0.11 - Changelog
  • Added API attribute responseHeaders [array|null] which returns an array of all response headers.
  • Changed _defaultOptions[CURLOPT_HEADER] to true.
  • Profile debugging is only active if constant YII_DEBUG is true.
Release 1.0.10 - Changelog
Release 1.0.9 - Changelog
Release 1.0.8 - Changelog
Release 1.0.7 - Changelog
  • Fixed getInfo([, int $opt = 0 ]) exception were cURL wasn't initialized before calling getInfo($opt).
Release 1.0.6 - Changelog
Release 1.0.5 - Changelog
  • Made body callback not depending on HTTP-Status codes anymore. You can retrieve body data on any HTTP-Status now.
  • Fixed Issue https://github.com/linslin/Yii2-Curl/issues/19 where override default settings break options.
  • Added timeout response handling. $curl->responseCode = 'timeout'
Release 1.0.4 - Changelog
Release 1.0.3 - Changelog
Release 1.0.2 - Changelog
  • Added custom params support
  • Added custom status code support
  • Added POST-Param support and a readme example
  • Removed "body" support at request functions. Please use "CURLOPT_POSTFIELDS" to setup a body now.
  • Readme modifications
Release 1.0.1 - Changelog
  • Removed widget support
  • Edited some spellings + added more examples into readme.md
Release 1.0 - Changelog
  • Official stable release

Thanks to


Mariano Custiel (@mcustiel)

... and all other contributors.