All Projects → andriichuk → php-curl-cookbook

andriichuk / php-curl-cookbook

Licence: MIT license
PHP CURL Cookbook 📖

Programming Languages

PHP
23972 projects - #3 most used programming language
shell
77523 projects
Dockerfile
14818 projects

Projects that are alternatives of or similar to php-curl-cookbook

Guzzle
Guzzle, an extensible PHP HTTP client
Stars: ✭ 21,384 (+25663.86%)
Mutual labels:  curl, guzzle, http-client
Curlie
The power of curl, the ease of use of httpie.
Stars: ✭ 877 (+956.63%)
Mutual labels:  curl, http-client
Urllib
Request HTTP(s) URLs in a complex world
Stars: ✭ 600 (+622.89%)
Mutual labels:  curl, http-client
Katipo
HTTP2 client for Erlang based on libcurl and libevent
Stars: ✭ 90 (+8.43%)
Mutual labels:  curl, http-client
Yii2 Httpclient
Yii 2 HTTP client
Stars: ✭ 406 (+389.16%)
Mutual labels:  curl, http-client
Node Libcurl
libcurl bindings for Node.js
Stars: ✭ 447 (+438.55%)
Mutual labels:  curl, http-client
Http Client
A high-performance, high-stability, cross-platform HTTP client.
Stars: ✭ 86 (+3.61%)
Mutual labels:  curl, http-client
Requester
Powerful, modern HTTP/REST client built on top of the Requests library
Stars: ✭ 273 (+228.92%)
Mutual labels:  curl, http-client
Httpp
Micro http server and client written in C++
Stars: ✭ 144 (+73.49%)
Mutual labels:  curl, http-client
Curlsharp
CurlSharp - .Net binding and object-oriented wrapper for libcurl.
Stars: ✭ 153 (+84.34%)
Mutual labels:  curl, http-client
Ob Http
make http request within org-mode babel
Stars: ✭ 191 (+130.12%)
Mutual labels:  curl, http-client
Requests
Requests for PHP is a humble HTTP request library. It simplifies how you interact with other sites and takes away all your worries.
Stars: ✭ 3,433 (+4036.14%)
Mutual labels:  curl, http-client
Kurly
kurly is an alternative to the widely popular curl program, written in Golang.
Stars: ✭ 319 (+284.34%)
Mutual labels:  curl, http-client
Httpie
As easy as /aitch-tee-tee-pie/ 🥧 Modern, user-friendly command-line HTTP client for the API era. JSON support, colors, sessions, downloads, plugins & more. https://twitter.com/httpie
Stars: ✭ 53,052 (+63818.07%)
Mutual labels:  curl, http-client
Insomnia
The open-source, cross-platform API client for GraphQL, REST, and gRPC.
Stars: ✭ 18,969 (+22754.22%)
Mutual labels:  curl, http-client
Lush Http
Smart Http Client for PHP
Stars: ✭ 60 (-27.71%)
Mutual labels:  curl, http-client
Libhv
🔥 比libevent、libuv更易用的国产网络库。A c/c++ network library for developing TCP/UDP/SSL/HTTP/WebSocket client/server.
Stars: ✭ 3,355 (+3942.17%)
Mutual labels:  curl, http-client
Php Curl Class
PHP Curl Class makes it easy to send HTTP requests and integrate with web APIs
Stars: ✭ 2,903 (+3397.59%)
Mutual labels:  curl, http-client
H2c
headers 2 curl. Provided a set of HTTP request headers, output the curl command line for generating that set. Try the converter online at
Stars: ✭ 113 (+36.14%)
Mutual labels:  curl, http-client
Yurunhttp
YurunHttp 是开源的 PHP HTTP 客户端,支持链式操作,简单易用。完美支持Curl、Swoole 协程。QQ群:17916227
Stars: ✭ 197 (+137.35%)
Mutual labels:  curl, guzzle

PHP CURL Cookbook

SWUbanner

List of commonly used cases with PHP cURL extension.

CURL library Home Page and Wiki Page.

PHP Extension Page and List Of Options.

PHP Guzzle library - wrapper over PHP CURL extension.

For testing requests we will use the excellent services httpbin.org and Postman Echo.

Table of Contents

Requirements

  • PHP >= 5.5
  • cURL PHP Extension
  • Mbstring PHP Extension
  • Fileinfo PHP Extension

Installation

Download repository

git clone https://github.com/andriichuk/php-curl-cookbook.git

Go to the directory

cd ./php-curl-cookbook

Install composer dependencies

bash run composer install

Run BASH example

bash run bash 01_Basics/01_Request_Methods/01_Get/console.sh

Run PHP example

bash run php 01_Basics/01_Request_Methods/01_Get/curl-ext.php

For multiple usage

bash console

bash 01_Basics/01_Request_Methods/01_Get/console.sh
php 01_Basics/01_Request_Methods/01_Get/curl-ext.php

Basics

HTTP Request methods

GET method

Bash

[example]

curl --request GET "https://postman-echo.com/get?foo=bar"

PHP CURL extension

[example]

The default method is GET. If you want to specify it directly than add CURLOPT_CUSTOMREQUEST option.

$curlHandler = curl_init();

curl_setopt_array($curlHandler, [
    CURLOPT_URL => 'https://postman-echo.com/get?foo=bar',
    CURLOPT_RETURNTRANSFER => true,
    
    /**
     * Or specify directly
     * CURLOPT_CUSTOMREQUEST => 'GET'
     */
]);

$response = curl_exec($curlHandler);
curl_close($curlHandler);

echo($response);

PHP Guzzle library

Call get method of Guzzle Client instance.

[example]

use GuzzleHttp\Client;
use GuzzleHttp\RequestOptions;

$httpClient = new Client();

$response = $httpClient->get(
    'https://postman-echo.com/get',
    [
        RequestOptions::QUERY => [
            'foo' => 'bar',
        ],
    ]
);

echo($response->getBody()->getContents());
Response

{"args":{"foo":"bar"},"headers":{"x-forwarded-proto":"https","host":"postman-echo.com","user-agent":"GuzzleHttp/6.3.3 curl/7.64.0 PHP/7.3.5-1+ubuntu19.04.1+deb.sury.org+1","x-forwarded-port":"443"},"url":"https://postman-echo.com/get?foo=bar"}

POST raw request

Bash

[example]

curl --request POST "https://postman-echo.com/post" --data "POST raw request content"

PHP CURL extension

[example]

$curlHandler = curl_init();

curl_setopt_array($curlHandler, [
    CURLOPT_URL => 'https://postman-echo.com/post',
    CURLOPT_RETURNTRANSFER => true,

    /**
     * Specify POST method
     */
    CURLOPT_POST => true,

    /**
     * Specify request content
     */
    CURLOPT_POSTFIELDS => 'POST raw request content',
]);

$response = curl_exec($curlHandler);

curl_close($curlHandler);

echo($response);

PHP Guzzle library

Call post method of Guzzle Client instance.

[example]

use GuzzleHttp\Client;
use GuzzleHttp\RequestOptions;

$httpClient = new Client();

$response = $httpClient->post(
    'https://postman-echo.com/post',
    [
        RequestOptions::BODY => 'POST raw request content',
        RequestOptions::HEADERS => [
            'Content-Type' => 'application/x-www-form-urlencoded',
        ],
    ]
);

echo($response->getBody()->getContents());
Response

{"args":{},"data":"","files":{},"form":{"POST raw request content":""},"headers":{"x-forwarded-proto":"https","host":"postman-echo.com","content-length":"24","content-type":"application/x-www-form-urlencoded","user-agent":"GuzzleHttp/6.3.3 curl/7.64.0 PHP/7.3.5-1+ubuntu19.04.1+deb.sury.org+1","x-forwarded-port":"443"},"json":{"POST raw request content":""},"url":"https://postman-echo.com/post"}

POST form data

Bash

[example]

curl --request POST "https://postman-echo.com/post" --data "foo=bar&baz=biz"

PHP CURL extension

[example]

$curlHandler = curl_init();

curl_setopt_array($curlHandler, [
    CURLOPT_URL => 'https://postman-echo.com/post',
    CURLOPT_RETURNTRANSFER => true,

    /**
     * Specify POST method
     */
    CURLOPT_POST => true,

    /**
     * Specify array of form fields
     */
    CURLOPT_POSTFIELDS => [
        'foo' => 'bar',
        'baz' => 'biz',
    ],
]);

$response = curl_exec($curlHandler);

curl_close($curlHandler);

echo($response);

PHP Guzzle library

Call post method of Guzzle Client instance.

[example]

use GuzzleHttp\Client;
use GuzzleHttp\RequestOptions;

$httpClient = new Client();

$response = $httpClient->post(
    'https://postman-echo.com/post',
    [
        RequestOptions::FORM_PARAMS => [
            'foo' => 'bar',
            'baz' => 'biz',
        ],
    ]
);

echo($response->getBody()->getContents());
Response

{"args":{},"data":"","files":{},"form":{"foo":"bar","baz":"biz"},"headers":{"x-forwarded-proto":"https","host":"postman-echo.com","content-length":"15","content-type":"application/x-www-form-urlencoded","user-agent":"GuzzleHttp/6.3.3 curl/7.64.0 PHP/7.3.5-1+ubuntu19.04.1+deb.sury.org+1","x-forwarded-port":"443"},"json":{"foo":"bar","baz":"biz"},"url":"https://postman-echo.com/post"}

PUT method

Bash

[example]

curl --request PUT "https://postman-echo.com/put" --data "foo=bar&baz=biz"

PHP CURL extension

[example]

$curlHandler = curl_init();

curl_setopt_array($curlHandler, [
    CURLOPT_URL => 'https://postman-echo.com/put',
    CURLOPT_RETURNTRANSFER => true,

    /**
     * Specify custom HTTP request method
     */
    CURLOPT_CUSTOMREQUEST => 'PUT',

    /**
     * Specify request body (can be array or string)
     */
    CURLOPT_POSTFIELDS => [
        'foo' => 'bar',
        'baz' => 'biz',
    ]
]);

$pageContent = curl_exec($curlHandler);

curl_close($curlHandler);

echo($pageContent);

PHP Guzzle library

Call put method of Guzzle Client instance.

[example]

use GuzzleHttp\Client;
use GuzzleHttp\RequestOptions;

$httpClient = new Client();

$response = $httpClient->put(
    'https://postman-echo.com/put',
    [
        RequestOptions::FORM_PARAMS => [
            'foo' => 'bar',
            'baz' => 'biz',
        ],
    ]
);

echo($response->getBody()->getContents());
Response

{"args":{},"data":"","files":{},"form":{"foo":"bar","baz":"biz"},"headers":{"x-forwarded-proto":"https","host":"postman-echo.com","content-length":"15","content-type":"application/x-www-form-urlencoded","user-agent":"GuzzleHttp/6.3.3 curl/7.64.0 PHP/7.3.5-1+ubuntu19.04.1+deb.sury.org+1","x-forwarded-port":"443"},"json":{"foo":"bar","baz":"biz"},"url":"https://postman-echo.com/put"}

PATCH method

Bash

curl --request PATCH "https://postman-echo.com/patch" --data "foo=bar&baz=biz"

PHP CURL extension

$curlHandler = curl_init();

curl_setopt_array($curlHandler, [
    CURLOPT_URL => 'https://postman-echo.com/patch',
    CURLOPT_RETURNTRANSFER => true,

    /**
     * Specify custom HTTP request method
     */
    CURLOPT_CUSTOMREQUEST => 'PATCH',

    /**
     * Specify request body (can be array or string)
     */
    CURLOPT_POSTFIELDS => [
        'foo' => 'bar',
        'baz' => 'biz',
    ]
]);

$pageContent = curl_exec($curlHandler);

curl_close($curlHandler);

echo($pageContent);

PHP Guzzle library

Call patch method of Guzzle Client instance.

use GuzzleHttp\Client;
use GuzzleHttp\RequestOptions;

$httpClient = new Client();

$response = $httpClient->patch(
    'https://postman-echo.com/patch',
    [
        RequestOptions::FORM_PARAMS => [
            'foo' => 'bar',
            'baz' => 'biz',
        ],
    ]
);

echo($response->getBody()->getContents());
Response

{"args":{},"data":"","files":{},"form":{"foo":"bar","baz":"biz"},"headers":{"x-forwarded-proto":"https","host":"postman-echo.com","content-length":"15","accept":"*/*","content-type":"application/x-www-form-urlencoded","user-agent":"curl/7.64.0","x-forwarded-port":"443"},"json":{"foo":"bar","baz":"biz"},"url":"https://postman-echo.com/patch"}

DELETE method

Bash

curl --request DELETE "https://postman-echo.com/delete" --data "foo=bar&baz=biz" --max-time 10

PHP CURL extension

$curlHandler = curl_init();

curl_setopt_array($curlHandler, [
    CURLOPT_URL => 'https://postman-echo.com/delete',
    CURLOPT_RETURNTRANSFER => true,

    /**
     * Specify custom HTTP request method
     */
    CURLOPT_CUSTOMREQUEST => 'DELETE',

    /**
     * Specify request body (can be array or string)
     */
    CURLOPT_POSTFIELDS => [
        'foo' => 'bar',
        'baz' => 'biz',
    ]
]);

$pageContent = curl_exec($curlHandler);

curl_close($curlHandler);

echo($pageContent);

PHP Guzzle library

Call delete method of Guzzle Client instance.

use GuzzleHttp\Client;
use GuzzleHttp\RequestOptions;

$httpClient = new Client();

$response = $httpClient->delete(
    'https://postman-echo.com/delete',
    [
        RequestOptions::FORM_PARAMS => [
            'foo' => 'bar',
            'baz' => 'biz',
        ],
    ]
);

echo($response->getBody()->getContents());
Response

{"args":{},"data":"","files":{},"form":{"foo":"bar","baz":"biz"},"headers":{"x-forwarded-proto":"https","host":"postman-echo.com","content-length":"15","content-type":"application/x-www-form-urlencoded","user-agent":"GuzzleHttp/6.3.3 curl/7.64.0 PHP/7.3.5-1+ubuntu19.04.1+deb.sury.org+1","x-forwarded-port":"443"},"json":{"foo":"bar","baz":"biz"},"url":"https://postman-echo.com/delete"}

Headers

Send custom request headers

Bash

curl --request GET "https://postman-echo.com/headers" --header "foo: bar" --header "baz: biz"

PHP CURL extension

$curlHandler = curl_init();

curl_setopt_array($curlHandler, [
    CURLOPT_URL => 'https://postman-echo.com/headers',
    CURLOPT_RETURNTRANSFER => true,

    /**
     * Specify request headers
     */
    CURLOPT_HTTPHEADER => [
        'foo: bar',
        'baz: biz',
    ]
]);

$pageContent = curl_exec($curlHandler);

curl_close($curlHandler);

echo($pageContent);

PHP Guzzle library

use GuzzleHttp\Client;
use GuzzleHttp\RequestOptions;

$httpClient = new Client();

$response = $httpClient->get(
    'https://postman-echo.com/headers',
    [
        RequestOptions::HEADERS => [
            'foo' => 'bar',
            'baz' => 'biz',
        ],
    ]
);

print_r(
    $response->getBody()->getContents()
);
Response

{"headers":{"x-forwarded-proto":"https","host":"postman-echo.com","baz":"biz","foo":"bar","user-agent":"GuzzleHttp/6.3.3 curl/7.64.0 PHP/7.3.5-1+ubuntu19.04.1+deb.sury.org+1","x-forwarded-port":"443"}}

Get response headers

Bash

curl --request GET "https://postman-echo.com/response-headers?Content-Type=text/html&foo=bar"

PHP CURL extension

$headers = [];

$curlHandler = curl_init();

curl_setopt_array($curlHandler, [
    CURLOPT_URL => 'https://postman-echo.com/response-headers?foo=bar',

    /**
     * Exclude the body from the output
     */
    CURLOPT_NOBODY => true,
    CURLOPT_RETURNTRANSFER => false,

    /**
     * Include the header in the output
     */
    CURLOPT_HEADER => false,

    /**
     * Collect server response headers
     */
    CURLOPT_HEADERFUNCTION => function ($curlInfo, $header) use (&$headers) {
        array_push($headers, trim($header));

        return mb_strlen($header);
    },
]);

curl_exec($curlHandler);

curl_close($curlHandler);

print_r(
    array_filter($headers)
);

PHP Guzzle library

use GuzzleHttp\Client;

$httpClient = new Client();

$response = $httpClient->get('https://postman-echo.com/response-headers?foo=bar');

print_r(
    $response->getHeaders()
);
Response

Array
(
    [Content-Type] => Array
        (
            [0] => application/json; charset=utf-8
        )

    [Date] => Array
        (
            [0] => Sun, 19 May 2019 14:16:36 GMT
        )
    // ...	

Request stats

Bash

See full list of options here

curl --request GET "https://postman-echo.com/get?foo=bar" -w "size_download:  %{size_download}" -o /dev/null -s

PHP CURL extension

$curlHandler = curl_init();

curl_setopt_array($curlHandler, [
    CURLOPT_URL => 'https://postman-echo.com/get?foo=bar',
    CURLOPT_RETURNTRANSFER => true,
]);

curl_exec($curlHandler);

$curlInfo = curl_getinfo($curlHandler);

curl_close($curlHandler);

print_r($curlInfo);

PHP Guzzle library

use GuzzleHttp\Client;
use GuzzleHttp\RequestOptions;
use GuzzleHttp\TransferStats;

$httpClient = new Client();

$httpClient->get(
    'https://postman-echo.com/get',
    [
        RequestOptions::ON_STATS => function (TransferStats $stats) {
            print_r($stats->getHandlerStats());
        }
    ]
);
Response

Array
(
    [url] => https://postman-echo.com/get
    [content_type] => application/json; charset=utf-8
    [http_code] => 200
    [header_size] => 354
    [request_size] => 128
    [filetime] => -1
    [ssl_verify_result] => 0
    [redirect_count] => 0
    // ...

Debug request

Output debug info to STDERR

Bash

[example]

curl --verbose --request GET "https://postman-echo.com/get?foo=bar"

PHP CURL extension

[example]

$curlHandler = curl_init();

curl_setopt_array($curlHandler, [
    CURLOPT_URL => 'https://postman-echo.com/get?foo=bar',
    CURLOPT_RETURNTRANSFER => true,

    /**
     * Specify debug option
     */
    CURLOPT_VERBOSE => true,
]);

curl_exec($curlHandler);

curl_close($curlHandler);

PHP Guzzle library

[example]

use GuzzleHttp\Client;
use GuzzleHttp\RequestOptions;

$httpClient = new Client();

$httpClient->get(
    'https://postman-echo.com/get?foo=bar',
    [
        RequestOptions::DEBUG => true,
    ]
);
Response

*   Trying 35.153.115.14...
* TCP_NODELAY set
* Expire in 149999 ms for 3 (transfer 0x55b754f97120)
* Expire in 200 ms for 4 (transfer 0x55b754f97120)
* Connected to postman-echo.com (35.153.115.14) port 443 (#0)
// ...

Output debug info to file

Bash

[example]

curl --request GET "https://postman-echo.com/get?foo=bar" --verbose --silent > debug.log 2>&1

PHP CURL extension

[example]

$curlHandler = curl_init();

curl_setopt_array($curlHandler, [
    CURLOPT_URL => 'https://postman-echo.com/get?foo=bar',
    CURLOPT_RETURNTRANSFER => true,

    /**
     * Specify debug option.
     */
    CURLOPT_VERBOSE => true,

    /**
     * Specify log file.
     * Make sure that the folder is writable.
     */
    CURLOPT_STDERR => fopen('./curl.log', 'w+'),
]);

curl_exec($curlHandler);

curl_close($curlHandler);

PHP Guzzle library

[example]

use GuzzleHttp\Client;
use GuzzleHttp\RequestOptions;

$httpClient = new Client();

$httpClient->get(
    'https://postman-echo.com/get?foo=bar',
    [
        RequestOptions::DEBUG => fopen('./guzzle.log', 'w+'),
    ]
);

Log file content

*   Trying 35.153.115.14...
* TCP_NODELAY set
* Expire in 149999 ms for 3 (transfer 0x55b754f97120)
* Expire in 200 ms for 4 (transfer 0x55b754f97120)
* Connected to postman-echo.com (35.153.115.14) port 443 (#0)
// ...

Error catching

Bash

[example]

curl --verbose --request GET "https://httpbin.org/delay/5" --max-time 3 --connect-timeout 2

PHP CURL extension

[example]

$curlHandler = curl_init();

curl_setopt_array($curlHandler, [
    CURLOPT_URL => 'https://httpbin.org/delay/5',
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_CONNECTTIMEOUT => 2,
    CURLOPT_TIMEOUT => 3,
]);

$response = curl_exec($curlHandler);
$statusCode = curl_getinfo($curlHandler, CURLINFO_HTTP_CODE);

if ($statusCode > 300) {
    print_r('Redirection or Error response with status: ' . $statusCode);
}

if (curl_errno($curlHandler) !== CURLE_OK) {
    print_r([
        'error_code' => curl_errno($curlHandler),
        'error_message' => curl_error($curlHandler),
    ]);
}

curl_close($curlHandler);

PHP Guzzle library

[example]

use GuzzleHttp\Client;
use GuzzleHttp\RequestOptions;
use GuzzleHttp\Exception\GuzzleException;

$httpClient = new Client();

try {
    $response = $httpClient->get(
        'https://httpbin.org/dedlay/5',
        [
            RequestOptions::CONNECT_TIMEOUT => 2,
            RequestOptions::TIMEOUT => 3,
        ]
    );

    print_r($response->getBody()->getContents());
} catch (GuzzleException $exception) {
    print_r([
        'code' => $exception->getCode(),
        'message' => $exception->getMessage(),
    ]);
}
Response

Array
(
    [error_code] => 28
    [error_message] => Operation timed out after 3001 milliseconds with 0 bytes received
)

Follow redirects

Bash

curl --location --max-redirs 5 -X GET "https://httpbin.org/absolute-redirect/3"

PHP CURL extension

$curlHandler = curl_init();

curl_setopt_array($curlHandler, [
    CURLOPT_URL => 'https://httpbin.org/absolute-redirect/3',
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_FOLLOWLOCATION => true,
    CURLOPT_MAXREDIRS => 5,
]);

$content = curl_exec($curlHandler);
$curlInfo = curl_getinfo($curlHandler);

curl_close($curlHandler);

print_r($curlInfo);

PHP Guzzle library

use GuzzleHttp\Client;
use GuzzleHttp\RequestOptions;
use GuzzleHttp\TransferStats;

$httpClient = new Client();

$response = $httpClient->get(
    'https://httpbin.org/absolute-redirect/3',
    [
        RequestOptions::ALLOW_REDIRECTS => [
            'max' => 5,
        ],
    ]
);

echo $response->getStatusCode();
Response

{
  "args": {}, 
  "headers": {
    "Accept": "*/*", 
    "Host": "httpbin.org", 
    "User-Agent": "curl/7.64.0"
  }, 
  "url": "https://httpbin.org/get"
}

Timeouts

Bash

[example]

curl --request GET "https://httpbin.org/delay/5" --max-time 20 --connect-timeout 10

PHP CURL extension

[example]

$curlHandler = curl_init();

curl_setopt_array($curlHandler, [
    CURLOPT_URL => 'https://httpbin.org/delay/5',
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_CONNECTTIMEOUT => 10,
    CURLOPT_TIMEOUT => 20,
]);

$response = curl_exec($curlHandler);

curl_close($curlHandler);

print_r($response);

PHP Guzzle library

[example]

use GuzzleHttp\Client;
use GuzzleHttp\RequestOptions;

$httpClient = new Client();

$response = $httpClient->get(
    'https://httpbin.org/delay/5',
    [
        RequestOptions::CONNECT_TIMEOUT => 10,
        RequestOptions::TIMEOUT => 20,
    ]
);

print_r($response->getBody()->getContents());

Set HTTP version

Bash

[example]

# See https://ec.haxx.se/http-versions.html

curl --request GET "https://httpbin.org/get" --http2

PHP CURL extension

[example]

$curlHandler = curl_init();

curl_setopt_array($curlHandler, [
    CURLOPT_URL => 'https://httpbin.org/get',
    CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_2_0,
]);

curl_exec($curlHandler);
$info = curl_getinfo($curlHandler);
curl_close($curlHandler);

print_r($info);

PHP Guzzle library

[example]

use GuzzleHttp\Client;
use GuzzleHttp\RequestOptions;
use GuzzleHttp\TransferStats;

$httpClient = new Client();

$response = $httpClient->get(
    'https://httpbin.org/get',
    [
        RequestOptions::VERSION => 2.0,
        RequestOptions::ON_STATS => function (TransferStats $stats) {
            print_r($stats->getHandlerStats());
        }
    ]
);
Response

Array
(
    [url] => https://httpbin.org/get
    ...
    [http_version] => 2
    [protocol] => 2
    ...
)

Get cURL version

Bash

[example]

curl --version

PHP CURL extension and Guzzle library

[example]

print_r(curl_version());
Response

curl 7.64.0 (x86_64-pc-linux-gnu) libcurl/7.64.0 OpenSSL/1.1.1c zlib/1.2.11 libidn2/2.0.5 libpsl/0.20.2 (+libidn2/2.0.5) libssh/0.8.6/openssl/zlib nghttp2/1.36.0 librtmp/2.3
Release-Date: 2019-02-06
Protocols: dict file ftp ftps gopher http https imap imaps ldap ldaps pop3 pop3s rtmp rtsp scp sftp smb smbs smtp smtps telnet tftp 
Features: AsynchDNS IDN IPv6 Largefile GSS-API Kerberos SPNEGO NTLM NTLM_WB SSL libz TLS-SRP HTTP2 UnixSockets HTTPS-proxy PSL

Set User agent

Bash

[example]

curl --request GET "https://httpbin.org/get" --user-agent 'Mozilla/5.0 (iPhone; U; CPU like Mac OS X; en) AppleWebKit/420+ (KHTML, like Gecko) Version/3.0 Mobile/1A537a Safari/419.3'

PHP CURL extension

[example]

$curlHandler = curl_init();

curl_setopt_array($curlHandler, [
    CURLOPT_URL => 'https://postman-echo.com/get',
    CURLOPT_USERAGENT => 'Mozilla/5.0 (iPhone; U; CPU like Mac OS X; en) AppleWebKit/420+ (KHTML, like Gecko) Version/3.0 Mobile/1A537a Safari/419.3',
    
    /* OR set header
      CURLOPT_HTTPHEADER => [
        'User-Agent: Mozilla/5.0 (iPhone; U; CPU like Mac OS X; en) AppleWebKit/420+ (KHTML, like Gecko) Version/3.0 Mobile/1A537a Safari/419.3',
    ]*/
]);

$response = curl_exec($curlHandler);

curl_close($curlHandler);

print_r($response);

PHP Guzzle library

[example]

use GuzzleHttp\Client;
use GuzzleHttp\RequestOptions;

$httpClient = new Client();

$response = $httpClient->get(
    'https://httpbin.org/get',
    [
        RequestOptions::HEADERS => [
            'User-Agent' => 'Mozilla/5.0 (iPhone; U; CPU like Mac OS X; en) AppleWebKit/420+ (KHTML, like Gecko) Version/3.0 Mobile/1A537a Safari/419.3',
        ]
    ]
);

print_r($response->getBody()->getContents());

Redirect Location History

Bash

[example]

curl --verbose --location --request GET "https://httpbin.org/absolute-redirect/5" 2>&1 | grep "Location:"
Response

< Location: http://httpbin.org/absolute-redirect/4
< Location: http://httpbin.org/absolute-redirect/3
< Location: http://httpbin.org/absolute-redirect/2
< Location: http://httpbin.org/absolute-redirect/1
< Location: http://httpbin.org/get

PHP CURL extension

[example]

$curlHandler = curl_init();

$locations = [];

curl_setopt_array(
    $curlHandler,
    [
        CURLOPT_URL => 'https://httpbin.org/absolute-redirect/5',
        CURLOPT_NOBODY => true,
        CURLOPT_FOLLOWLOCATION => true,
        CURLOPT_HEADERFUNCTION => function ($curlInfo, $header) use (&$locations) {
            preg_match('#Location:\s(?<url>[\S]+)#iu', $header, $location);

            if (!empty($location['url'])) {
                $locations[] = trim($location['url']);
            }

            return mb_strlen($header);
        },
    ]
);

curl_exec($curlHandler);
curl_close($curlHandler);

print_r($locations);
Response

Array
(
    [0] => http://httpbin.org/absolute-redirect/4
    [1] => http://httpbin.org/absolute-redirect/3
    [2] => http://httpbin.org/absolute-redirect/2
    [3] => http://httpbin.org/absolute-redirect/1
    [4] => http://httpbin.org/get
)

PHP Guzzle library

[example]

use GuzzleHttp\Client;
use GuzzleHttp\RequestOptions;
use GuzzleHttp\RedirectMiddleware;

$httpClient = new Client();

$response = $httpClient->get(
    'https://httpbin.org/absolute-redirect/5',
    [
        RequestOptions::ALLOW_REDIRECTS => [
            'max' => 5,
            'track_redirects' => true,
        ],
    ]
);

print_r($response->getHeader(RedirectMiddleware::HISTORY_HEADER));
Response

Array
(
    [0] => http://httpbin.org/absolute-redirect/4
    [1] => http://httpbin.org/absolute-redirect/3
    [2] => http://httpbin.org/absolute-redirect/2
    [3] => http://httpbin.org/absolute-redirect/1
    [4] => http://httpbin.org/get
)

Set HTTP Referer

Bash

[example]

curl --request GET "https://httpbin.org/get" --referer "https://github.com"

PHP CURL extension

[example]

$curlHandler = curl_init();

curl_setopt_array($curlHandler, [
    CURLOPT_URL => 'https://httpbin.org/get',
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_REFERER => 'https://github.com',
]);

$response = curl_exec($curlHandler);

curl_close($curlHandler);

print_r($response);

PHP Guzzle library

[example]

use GuzzleHttp\Client;
use GuzzleHttp\RequestOptions;

$httpClient = new Client();

$response = $httpClient->get(
    'https://httpbin.org/get',
    [
        RequestOptions::HEADERS => [
            'Referer' => 'https://github.com',
        ],
    ]
);

print_r($response->getBody()->getContents());
Response

{
  "args": {}, 
  "headers": {
    "Accept": "*/*", 
    "Host": "httpbin.org", 
    "Referer": "https://github.com", 
    "User-Agent": "curl/7.64.0"
  }, 
  "origin": "100.00.00.00", 
  "url": "https://httpbin.org/get"
}

Advanced

Files

Upload file

Bash

[example]

# format: curl --form '[request_field_name]=@[absolute_path_to_file]' [upload_url]
curl --form 'file=@/home/serge/curl-examples/02_Advanced/01_Files/01_Upload/resource/file.txt' https://postman-echo.com/post

PHP CURL extension

[example]

$uploadFilePath = __DIR__ . '/resource/file.txt';

if (!file_exists($uploadFilePath)) {
    throw new Exception('File not found: ' . $uploadFilePath);
}

$uploadFileMimeType = mime_content_type($uploadFilePath);
$uploadFilePostKey = 'file';

$uploadFile = new CURLFile(
    $uploadFilePath,
    $uploadFileMimeType,
    $uploadFilePostKey
);

$curlHandler = curl_init();

curl_setopt_array($curlHandler, [
    CURLOPT_URL => 'https://postman-echo.com/post',
    CURLOPT_RETURNTRANSFER => true,

    /**
     * Specify POST method
     */
    CURLOPT_POST => true,

    /**
     * Specify array of form fields
     */
    CURLOPT_POSTFIELDS => [
        $uploadFilePostKey => $uploadFile,
    ],
]);

$response = curl_exec($curlHandler);

curl_close($curlHandler);

echo($response);

PHP Guzzle library

[example]

use GuzzleHttp\Client;
use GuzzleHttp\RequestOptions;

$httpClient = new Client();

$response = $httpClient->post(
    'https://postman-echo.com/post',
    [
        RequestOptions::MULTIPART => [
            [
                'name' => 'file',
                'contents' => new SplFileObject(__DIR__ . '/resource/file.txt', 'r'),
                'filename' => 'file',
            ]
        ],
    ]
);

echo($response->getBody()->getContents());
Response

{"args":{},"data":{},"files":{"file":"data:application/octet-stream;base64,TG9yZW0gaXBzdW0gZG9sb3Igc2l0I ..."}}

Upload multiple files

Bash

[example]

curl --form 'text_file=@/home/serge/curl-examples/02_Advanced/01_Files/02_Upload_Multiple/resource/file.txt' \
--form 'image_file=@/home/serge/curl-examples/02_Advanced/01_Files/02_Upload_Multiple/resource/github-icon.png' \
https://postman-echo.com/post

PHP CURL extension

[example]

$localFiles = [
    'text_file' => __DIR__ . '/resource/file.txt',
    'image_file' => __DIR__ . '/resource/github-icon.png',
];

$uploadFiles = [];

foreach ($localFiles as $filePostKey => $uploadFilePath) {
    if (!file_exists($uploadFilePath)) {
        throw new Exception('File not found: ' . $uploadFilePath);
    }

    $uploadFileMimeType = mime_content_type($uploadFilePath);

    $uploadFiles[$filePostKey] = new CURLFile($uploadFilePath, $uploadFileMimeType, $filePostKey);
}

$curlHandler = curl_init();

curl_setopt_array($curlHandler, [
    CURLOPT_URL => 'https://postman-echo.com/post',
    CURLOPT_RETURNTRANSFER => true,

    /**
     * Specify POST method
     */
    CURLOPT_POST => true,

    /**
     * Specify array of form fields
     */
    CURLOPT_POSTFIELDS => $uploadFiles,
]);

$response = curl_exec($curlHandler);

curl_close($curlHandler);

echo($response);

PHP Guzzle library

[example]

use GuzzleHttp\Client;
use GuzzleHttp\RequestOptions;

$localFiles = [
    'text_file' => __DIR__ . '/resource/file.txt',
    'image_file' => __DIR__ . '/resource/github-icon.png',
];

$uploadFiles = [];

foreach ($localFiles as $filePostKey => $uploadFilePath) {
    if (!file_exists($uploadFilePath)) {
        throw new Exception('File not found: ' . $uploadFilePath);
    }

    array_push($uploadFiles, [
        'name' => $filePostKey,
        'contents' => new SplFileObject($uploadFilePath, 'r'),
        'filename' => $filePostKey,
    ]);
}

$httpClient = new Client();

$response = $httpClient->post(
    'https://postman-echo.com/post',
    [
        RequestOptions::MULTIPART => $uploadFiles,
    ]
);

echo($response->getBody()->getContents());

Response example

{"args":{},"data":{},"files":{"text_file":"data:application/octet-stream;base64,TG9yZW0gaXBzdW0gZG9sb3Ig ...", "image_file":"data:application/octet-stream;base64,iVBORw0KGgoAAAANSUhEUgAAANAAAADQC ..."}}

Upload multiple files as an array

Bash

[example]

curl --form 'documents[]=@/home/serge/projects/php-curl-cookbook/02_Advanced/01_Files/03_Upload_Array_Of_Files/resource/file-1.txt' \
--form 'documents[]=@/home/serge/projects/php-curl-cookbook/02_Advanced/01_Files/03_Upload_Array_Of_Files/resource/file-2.txt' \
--form 'images[icon]=@/home/serge/projects/php-curl-cookbook/02_Advanced/01_Files/03_Upload_Array_Of_Files/resource/github-icon.png' \
--form 'images[octocat]=@/home/serge/projects/php-curl-cookbook/02_Advanced/01_Files/03_Upload_Array_Of_Files/resource/github-octocat.jpg' \
https://postman-echo.com/post

PHP CURL extension

[example]

$localFiles = [
    // indexed
    'documents' => [
        __DIR__ . '/resource/file-1.txt',
        __DIR__ . '/resource/file-2.txt',
    ],

    // associated
    'images' => [
        'icon' => __DIR__ . '/resource/github-icon.png',
        'octocat' => __DIR__ . '/resource/github-octocat.jpg',
    ],
];

$uploadFiles = [];

foreach ($localFiles as $fileType => $files) {
    foreach ($files as $filePostKey => $uploadFilePath) {
        if (!file_exists($uploadFilePath)) {
            throw new Exception('File not found: ' . $uploadFilePath);
        }

        $uploadFileMimeType = mime_content_type($uploadFilePath);
        $keyName = sprintf('%s[%s]', $fileType, $filePostKey);

        $uploadFiles[$keyName] = new CURLFile($uploadFilePath, $uploadFileMimeType, $filePostKey);
    }
}

$curlHandler = curl_init();

curl_setopt_array($curlHandler, [
    CURLOPT_URL => 'https://postman-echo.com/post',
    CURLOPT_RETURNTRANSFER => true,

    /**
     * Specify POST method
     */
    CURLOPT_POST => true,

    /**
     * Specify array of form fields
     */
    CURLOPT_POSTFIELDS => $uploadFiles,
]);

$response = curl_exec($curlHandler);

curl_close($curlHandler);

echo($response);

PHP Guzzle library

[example]

use GuzzleHttp\Client;
use GuzzleHttp\RequestOptions;

$localFiles = [
    'documents' => [
        __DIR__ . '/resource/file-1.txt',
        __DIR__ . '/resource/file-2.txt',
    ],
    'images' => [
        'icon' => __DIR__ . '/resource/github-icon.png',
        'octocat' => __DIR__ . '/resource/github-octocat.jpg',
    ],
];

$uploadFiles = [];

foreach ($localFiles as $fileType => $files) {
    foreach ($files as $filePostKey => $uploadFilePath) {
        if (!file_exists($uploadFilePath)) {
            throw new Exception('File not found: ' . $uploadFilePath);
        }

        $uploadFileMimeType = mime_content_type($uploadFilePath);
        $keyName = sprintf('%s[%s]', $fileType, $filePostKey);

        array_push($uploadFiles, [
            'name' => $keyName,
            'contents' => new SplFileObject($uploadFilePath, 'r'),
            'filename' => $keyName,
        ]);
    }
}

$httpClient = new Client();

$response = $httpClient->post(
    'https://postman-echo.com/post',
    [
        RequestOptions::MULTIPART => $uploadFiles,
    ]
);

echo($response->getBody()->getContents());

Response example

{"args":{},"data":{},"files":{"file-1.txt":"data:application/octet-stream;base64,Rmlyc3QgRmlsZSBDb250ZW50Cg==","file-2.txt":"data:application/octet-stream;base64,U2V...=","github-icon.png":"data:application/octet-stream;base64,iVBORw...","github-octocat.jpg":"data:application/octet-stream;base64,/9j/4QAYRXhpZgAASUkqAAg..."},"form":{},"headers":{"x-forwarded-proto":"https","host":"postman-echo.com","content-length":"59650","accept":"*/*","content-type":"multipart/form-data; boundary=------------------------14a7692feb592877","user-agent":"curl/7.58.0","x-forwarded-port":"443"},"json":null,"url":"https://postman-echo.com/post"}

Download file

Bash

[example]

curl https://httpbin.org/image/jpeg --output /home/serge/curl-examples/02_Advanced/01_Files/04_Download/resource/image.jpeg

PHP CURL extension

[example]

$imageFilePath = __DIR__ . '/resource/image.jpeg';

$curlHandler = curl_init();

curl_setopt_array($curlHandler, [
    CURLOPT_URL => 'https://httpbin.org/image/jpeg',
    CURLOPT_FILE => fopen($imageFilePath, 'w+')
]);

curl_exec($curlHandler);

if (curl_errno($curlHandler) === CURLE_OK) {
    echo 'The image has been successfully downloaded: ' . $imageFilePath;
}

curl_close($curlHandler);

PHP Guzzle library

[example]

use GuzzleHttp\Client;
use GuzzleHttp\RequestOptions;

$imageFilePath = __DIR__ . '/resource/image.jpeg';
$imageFileResource = fopen($imageFilePath, 'w+');

$httpClient = new Client();
$response = $httpClient->get(
    'https://httpbin.org/image/jpeg',
    [
        RequestOptions::SINK => $imageFileResource,
    ]
);

if ($response->getStatusCode() === 200) {
    echo 'The image has been successfully downloaded: ' . $imageFilePath;
}
Response

The image has been successfully downloaded: /home/serge/curl-examples/02_Advanced/01_Files/04_Download/resource/image.jpeg

Auth

Basic Auth

Bash

[example]

curl --user postman:password --request GET "https://postman-echo.com/basic-auth"

PHP CURL extension

[example]

$curlHandler = curl_init();

$userName = 'postman';
$password = 'password';

curl_setopt_array($curlHandler, [
    CURLOPT_URL => 'https://postman-echo.com/basic-auth',
    CURLOPT_RETURNTRANSFER => true,

    CURLOPT_HTTPAUTH => CURLAUTH_BASIC,
    CURLOPT_USERPWD => $userName . ':' . $password,
]);

$response = curl_exec($curlHandler);
curl_close($curlHandler);

print_r('First example response: ' . $response . PHP_EOL);

/**
 * Or specify credentials in Authorization header
 */

$curlSecondHandler = curl_init();

curl_setopt_array($curlSecondHandler, [
    CURLOPT_URL => 'https://postman-echo.com/basic-auth',
    CURLOPT_RETURNTRANSFER => true,

    CURLOPT_HTTPHEADER => [
        'Authorization: Basic ' . base64_encode($userName . ':' . $password)
    ],
]);

$response = curl_exec($curlSecondHandler);
curl_close($curlSecondHandler);

print_r('Second example response: ' . $response . PHP_EOL);

PHP Guzzle library

[example]

use GuzzleHttp\Client;
use GuzzleHttp\RequestOptions;

$userName = 'postman';
$password = 'password';

$httpClient = new Client();

$response = $httpClient->get(
    'https://postman-echo.com/basic-auth',
    [
        RequestOptions::AUTH => [$userName, $password]
    ]
);

print_r($response->getBody()->getContents());
Response

{"authenticated":true}

Digest Auth

Bash

[example]

curl --digest --user postman:password --request GET "https://postman-echo.com/digest-auth"

PHP CURL extension

[example]

$curlHandler = curl_init();

$userName = 'postman';
$password = 'password';

curl_setopt_array($curlHandler, [
    CURLOPT_URL => 'https://postman-echo.com/digest-auth',
    CURLOPT_RETURNTRANSFER => true,

    CURLOPT_HTTPAUTH => CURLAUTH_DIGEST,
    CURLOPT_USERPWD => $userName . ':' . $password,
]);

$response = curl_exec($curlHandler);
curl_close($curlHandler);

print_r($response);

PHP Guzzle library

[example]

use GuzzleHttp\Client;
use GuzzleHttp\RequestOptions;

$userName = 'postman';
$password = 'password';

$httpClient = new Client();

$response = $httpClient->get(
    'https://postman-echo.com/digest-auth',
    [
        RequestOptions::AUTH => [$userName, $password, 'digest']
    ]
);

print_r($response->getBody()->getContents());
Response

{"authenticated":true}

Bearer Auth

Bash

[example]

curl -X GET "https://httpbin.org/bearer" -H "Accept: application/json" -H "Authorization: Bearer your_token"

PHP CURL extension

[example]

$curlHandler = curl_init();

$token = 'your_token';

curl_setopt_array($curlHandler, [
    CURLOPT_URL => 'https://httpbin.org/bearer',
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER => [
        'Accept: application/json',
        'Authorization: Bearer ' . $token
    ],
]);

$response = curl_exec($curlHandler);
curl_close($curlHandler);

print_r($response);

PHP Guzzle library

[example]

use GuzzleHttp\Client;
use GuzzleHttp\RequestOptions;

$token = 'your_token';

$httpClient = new Client();

$response = $httpClient->get(
    'https://httpbin.org/bearer',
    [
        RequestOptions::HEADERS => [
            'Accept' => 'application/json',
            'Authorization' => 'Bearer ' . $token,
        ]
    ]
);

print_r($response->getBody()->getContents());
Response

{
  "authenticated": true, 
  "token": "your_token"
}

Cookies

Send cookies from string

Bash

[example]

curl --cookie "foo=bar;baz=foo" --request GET "https://httpbin.org/cookies"

PHP CURL extension

[example]

$curlHandler = curl_init();

curl_setopt_array($curlHandler, [
    CURLOPT_URL => 'https://httpbin.org/cookies',
    CURLOPT_RETURNTRANSFER => true,

    CURLOPT_COOKIE => 'foo=bar;baz=foo',

    /**
     * Or set header
     * CURLOPT_HTTPHEADER => [
           'Cookie: foo=bar;baz=foo',
       ]
     */
]);

$response = curl_exec($curlHandler);
curl_close($curlHandler);

echo $response;

PHP Guzzle library

[example]

use GuzzleHttp\Client;
use GuzzleHttp\Cookie\CookieJar;
use GuzzleHttp\RequestOptions;

$httpClient = new Client();

$url = 'https://httpbin.org/cookies';
$urlHost = parse_url($url, PHP_URL_HOST);

$cookieJar = CookieJar::fromArray(
    [
        'foo' => 'bar',
        'baz' => 'foo',
    ],
    $urlHost
);

$response = $httpClient->get(
    $url,
    [
        RequestOptions::COOKIES => $cookieJar,
    ]
);

echo($response->getBody()->getContents());
Response

{
  "cookies": {
    "baz": "foo", 
    "foo": "bar"
  }
}

Set cookie options

Cookies have attributes that can be sent from the server to the client, but not from the client to the server. The client can only send the name and value of the cookie.

PHP Guzzle library

[example]

use GuzzleHttp\Client;
use GuzzleHttp\Cookie\CookieJar;
use GuzzleHttp\Cookie\SetCookie;
use GuzzleHttp\RequestOptions;

$httpClient = new Client();

$url = 'https://httpbin.org/cookies';
$urlHost = parse_url($url, PHP_URL_HOST);

$cookies = [
    new SetCookie([
        'Name'     => 'foo',
        'Value'    => 'bar',
        
        // Other attributes will not be sent to the server, they are only needed for validation.
        'Domain'   => $urlHost,
        'Path'     => '/',
        'Max-Age'  => 100,
        'Secure'   => false,
        'Discard'  => false,
        'HttpOnly' => false,
    ]),
    new SetCookie([
        'Name'     => 'baz',
        'Value'    => 'foo',
        'Domain'   => $urlHost,
        'Path'     => '/',
        'Max-Age'  => 100,
        'Secure'   => false,
        'Discard'  => false,
        'HttpOnly' => false,
    ]),
];

$cookieJar = new CookieJar(true, $cookies);

$response = $httpClient->get(
    $url,
    [
        RequestOptions::COOKIES => $cookieJar,
    ]
);

echo($response->getBody()->getContents());

Request headers

> GET /cookies HTTP/1.1
Host: httpbin.org
User-Agent: GuzzleHttp/6.3.3 curl/7.58.0 PHP/7.3.6-1+ubuntu18.04.1+deb.sury.org+1
Cookie: foo=bar; baz=foo
Response

{
  "cookies": {
    "baz": "foo", 
    "foo": "bar"
  }
}

Send cookies from file

Bash

Cookie JAR file structure:

# Domain    Flag    Path    Secure  Expiration  Name    Value
httpbin.org	FALSE	/	    FALSE	0	        foo	    bar
httpbin.org	FALSE	/	    FALSE	0	        baz	    foo

[example]

curl --cookie "02_Advanced/03_Cookies/03_Send_Cookies_From_File/resource/cookie-jar.txt" --request GET "https://httpbin.org/cookies"

PHP CURL extension

[example]

$curlHandler = curl_init();

$cookieFile = __DIR__ . '/resource/cookie-jar.txt';

curl_setopt_array($curlHandler, [
    CURLOPT_URL => 'https://httpbin.org/cookies',
    CURLOPT_RETURNTRANSFER => true,

    CURLOPT_COOKIEFILE  => $cookieFile,
]);

$response = curl_exec($curlHandler);
curl_close($curlHandler);

echo $response;

PHP Guzzle library

Guzzle cookie file structure:

[
  {
    "Name": "foo",
    "Value": "bar",
    "Domain": "httpbin.org",
    "Path": "\/",
    "Max-Age": 100,
    "Expires": 1567343671,
    "Secure": false,
    "Discard": false,
    "HttpOnly": false
  },
  {
    "Name": "baz",
    "Value": "foo",
    "Domain": "httpbin.org",
    "Path": "\/",
    "Max-Age": 100,
    "Expires": 1567343671,
    "Secure": false,
    "Discard": false,
    "HttpOnly": false
  }
]

[example]

use GuzzleHttp\Client;
use GuzzleHttp\RequestOptions;
use GuzzleHttp\Cookie\FileCookieJar;

$httpClient = new Client();

$cookieJarFile = new FileCookieJar(
    __DIR__ . '/resource/guzzle-cookie-jar.json',
    false
);

$response = $httpClient->get(
    'https://httpbin.org/cookies',
    [
        RequestOptions::COOKIES => $cookieJarFile,
    ]
);

echo $response->getBody()->getContents();
Response

{
  "cookies": {
    "baz": "foo", 
    "foo": "bar"
  }
}

Save Response cookies to file

Bash

[example]

curl --location --cookie-jar "02_Advanced/03_Cookies/04_Save_Response_Cookies_To_File/resource/cookie-jar.txt" --request GET "https://httpbin.org/cookies/set/foo/bar"

PHP CURL extension

[example]

$curlHandler = curl_init();

$cookieFile = __DIR__ . '/resource/cookie-jar.txt';

curl_setopt_array($curlHandler, [
    CURLOPT_URL => 'https://httpbin.org/cookies/set/foo/bar',
    CURLOPT_RETURNTRANSFER => true,

    CURLOPT_COOKIEJAR  => $cookieFile,
    CURLOPT_FOLLOWLOCATION => true,
]);

$response = curl_exec($curlHandler);
curl_close($curlHandler);

echo $response;

PHP Guzzle library

[example]

use GuzzleHttp\Client;
use GuzzleHttp\RequestOptions;
use GuzzleHttp\Cookie\FileCookieJar;

$httpClient = new Client();

$cookieJarFile = new FileCookieJar(
    __DIR__ . '/resource/guzzle-cookie-jar.json',
    true
);

$response = $httpClient->get(
    'https://httpbin.org/cookies/set/foo/bar',
    [
        RequestOptions::COOKIES => $cookieJarFile,
    ]
);

echo $response->getBody()->getContents();
Response

{
  "cookies": {
    "foo": "bar"
  }
}

Todo

Project link

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].