How to use cURL via a proxy ?

This tutorial will show the way to use a proxy with PHP’s cURL functions. In this tutorial, we’ll send our HTTP request via a selected proxy IP address and port.

Why should you use a proxy?
There are various reasons why you would possibly want to use a proxy with cURL:

  1. To get around regional filters and country blocks.
  2. Using a proxy IP addresses allows you to mask or hide your own IP address.
  3. To debug network connection issues.

Using a proxy with PHP’s cURL functions: To authenticate with a proxy via cURL and send a HTTP GET request follow along code given below and read the instructions specified as comments.

Note: All the credentials and links used are random and used for demo purpose only. Please use your own proxy, credentials and URL.

filter_none

edit
close

play_arrow

link
brightness_4
code

<?php
  
// Initialize URL you that want to
// send a cURL proxy request to.
$desturl = 'http://example.net';
  
// The IP address of the proxy that
// you want to send your request
// through
$proxyipadd = '11.22.33.44';
  
// The port that the proxy is
// listening on
$proxyport = '1234';
  
// The username for authenticating
// with the proxy
$proxyuserid = 'testuser';
  
// The password for authenticating
// with the proxy
$proxypass = 'testpass';
  
// Initialize curl 
$ci = curl_init($url);
  
// Set curl attributes
curl_setopt($ci, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ci, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ci, CURLOPT_HTTPPROXYTUNNEL , 1);
  
// Set the proxy IP
curl_setopt($ci, CURLOPT_PROXY, $proxyipadd);
  
// Set the port
curl_setopt($ci, CURLOPT_PROXYPORT, $proxyport);
  
// Set the username and password
curl_setopt($ci, CURLOPT_PROXYUSERPWD, 
            "$proxyuserid:$proxypass");
  
// Execute the request
$result = curl_exec($ci);
  
// Check if any errors
if(curl_errno($ci)){
    throw new Exception(curl_error($ci));
}
  
// Print the result.
echo $result;
?>

chevron_right


In the above code, we connected to a proxy that needs authentication before sending an easy GET request. If the proxy doesn’t require authentication, then you could omit the CURLOPT_PROXYUSERPWD line from your code.

Some errors you might encounter while using curl:

  • “Failed to attach to 11.22.33.44 port 1234: Timed out” This means that cURL couldn’t hook up with the proxy IP address and port used. Make sure that both the IP and port are correct and also check if the proxy is working correctly.
  • “Failed to attach to 11.22.33.44 port 1234: Connection refused” This error usually occurs once you have specified an incorrect port number i.e. the IP address of the proxy was correct, but it’s not listening for requests on specified port. There is also the likelihood that the server is up, but the software that runs the proxy isn’t running.
  • “Received HTTP code 407 from proxy after CONNECT” The username and password combo that you simply are using with CURLOPT_PROXYUSERPWD is wrong. Make sure that username and password are correct and you are separating the username and password by a colon : character.



My Personal Notes arrow_drop_up

Check out this Author's contributed articles.

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.