- Host
- gw.prokso.com
- Port
- 823 HTTP · 824 SOCKS5 — new IP per request · 10000–20000 sticky session, HTTP(S) and SOCKS5
- Username and password
- in your dashboard, on the plan page
Your dashboard generates ready-made lines in the format you need: choose the country, IP type and protocol.
- Host gw.prokso.com, ports 823 (HTTP), 824 (SOCKS5), 10000–20000 (sticky sessions, HTTP or SOCKS5)
- The username and password are in your dashboard on the plan page
- Check the IP in the response of the proxied request itself: the My IP page in a browser does not test your script
A step-by-step guide to connecting Prokso proxies in Guzzle (PHP). It takes a few minutes.
Step 1. Get the proxy details from your dashboard
Open your plan and copy the host gw.prokso.com, port, username and password. Port 823 is HTTP and 824 is SOCKS5 (both give a new IP for every request); ports 10000–20000 keep one IP (sticky session) for up to 120 minutes and work as both HTTP and SOCKS5 (each port is a separate address). Set the country in the username: username__cr.ua.

Step 2. Install Guzzle
In the project folder run composer require guzzlehttp/guzzle.
Step 3. Set the proxy in the client options
The proxy option takes the proxy URL with the username and password. Set in the client constructor, it applies to all its requests; you can also pass it to a single request.
<?php
require 'vendor/autoload.php';
$client = new GuzzleHttp\Client([
'proxy' => 'http://USERNAME:PASSWORD@gw.prokso.com:823',
'timeout' => 30,
]);
echo $client->get('https://api.ipify.org?format=json')->getBody();Step 4. SOCKS5 and per-protocol proxies
For SOCKS5 change the URL to socks5h://USERNAME:PASSWORD@gw.prokso.com:824 — the letter h means DNS lookups also go through the proxy. The proxy option also accepts an array with http, https and no keys if some addresses should skip the proxy.
Step 5. Check the output
Run the example: the script calls https://api.ipify.org and prints the IP the website sees. It should be the proxy's address, not yours. A 407 error means a wrong username or password. The My IP page in your browser won't help here: the browser goes direct.

Timeouts and error handling
Set both limits: connect_timeout for connecting to the proxy, and timeout for the whole request. By default Guzzle waits with no limit. Setting the http_errors option to false lets you handle the response codes yourself instead of getting exceptions:
<?php
require 'vendor/autoload.php';
$client = new GuzzleHttp\Client([
'proxy' => 'http://USERNAME:PASSWORD@gw.prokso.com:823',
'connect_timeout' => 10,
'timeout' => 30,
'http_errors' => false, // handle status codes yourself
]);
$res = $client->get('https://prokso.com/ip');
echo $res->getStatusCode(), ' ', $res->getBody();Code 407 means that the proxy did not accept the username or password, or that the plan has run out of traffic. Codes 403 and 429 come from the site. They are explained on the proxy error codes page.
Many requests at once
For parallel loading, use GuzzleHttp\Pool with the concurrency option: it limits the number of simultaneous requests. Start with 10 and raise it as long as the site responds without 429 errors. On port 823 every request goes out from a new IP.
Special characters in the username and password
The proxy address is a URL, so the @, :, and # characters in the password break its parsing. Pass the username and password through rawurlencode() before you build the string. The country is set in the username, for example USERNAME__cr.de, so you need to encode the complete, finished username.
FAQ
How do I keep one IP for several requests?
Replace port 823 with a sticky port from 10000–20000: all requests through it come from one address for up to 120 minutes.
I get a cURL proxy error. What should I check?
Check that the protocol matches the port: 823 is HTTP only, 824 is SOCKS5 only, ports 10000–20000 accept both. Code 407 means a wrong username or password.
Do I need the cURL extension for PHP?
It is recommended. With it Guzzle runs faster and supports SOCKS5. Without it, the PHP stream handler is used, which has fewer capabilities.
How do I set a proxy in Laravel?
Laravel's HTTP client is built on Guzzle: pass the same options through <code>Http::withOptions(['proxy' => ...])</code>.
Can I send some addresses past the proxy?
Yes. Pass <code>proxy</code> as an array and list the exceptions under the <code>no</code> key.