> [!WARNING]
> [Zyte API](../../zyte-api/get-started.md#zyte-api) is replacing Smart Proxy Manager. It is
> no longer possible to sign up to Smart Proxy Manager. If you are an
> existing Smart Proxy Manager user, see spm-migrate.

# Using Smart Proxy Manager with PHP

> [!NOTE]
> All the code in this documentation has been tested with PHP 7.3.29 and guzzlehttp/guzzle 7.3.0.

## Using Curl

Making use of [PHP binding](https://www.php.net/manual/en/book.curl.php) for libcurl:

```php
<?php

$ch = curl_init();

$url = 'https://httpbin.scrapinghub.com/get';
$proxy = 'proxy.zyte.com:8011';
$proxy_auth = '<API KEY>:';

curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_PROXY, $proxy);
curl_setopt($ch, CURLOPT_PROXYUSERPWD, $proxy_auth);
curl_setopt($ch, CURLOPT_HEADER, 1);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 30);
curl_setopt($ch, CURLOPT_TIMEOUT, 180);
curl_setopt($ch, CURLOPT_CAINFO, '/path/to/zyte-ca.crt'); //required for HTTPS
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 1); //required for HTTPS

$scraped_page = curl_exec($ch);

if($scraped_page === false)
{
    echo 'cURL error: ' . curl_error($ch);
}
else
{
    echo $scraped_page;
}

curl_close($ch);

?>
```

To get `zyte-ca.crt`, see [Installing the Zyte CA certificate](../../misc/ca.md#ca).

Refer to [curl_multi_exec](https://www.php.net/manual/en/function.curl-multi-exec.php)
function to take advantage of Smart Proxy Manager’s concurrency feature and process requests
in parallel (within the limits set for a given Smart Proxy Manager plan).

## Using Guzzle

A [Guzzle](https://github.com/guzzle/guzzle) example:

```php
<?php

use GuzzleHttp\Client as GuzzleClient;

$proxy_host = 'proxy.zyte.com';
$proxy_port = '8011';
$proxy_user = '<API KEY>';
$proxy_pass = '';
$proxy_url = "http://{$proxy_user}:{$proxy_pass}@{$proxy_host}:{$proxy_port}";

$url = 'https://httpbin.org/headers';

$guzzle_client = new GuzzleClient();
$res = $guzzle_client->request('GET', $url, [
    'proxy' => $proxy_url,
    'headers' => [
        'X-Crawlera-Cookies' => 'disable',
        'Accept-Encoding' => 'gzip, deflate, br',
    ]
]);

echo $res->getBody();

?>
```
