Skip to content

Instantly share code, notes, and snippets.

What would you like to do?
PHP: CURL Requests with Tor

#CURL Connections with Tor

Install Apache, PHP, CURL & Tor with apt-get

sudo apt-get install -y apache2 php5 php5-curl tor

Tor creates a proxy on your mashine with port 9050 for SOCKS5 connections.

class Proxy {

	private $ch, $proxy;

	function __construct() {

		$torSocks5Proxy = "socks5://";

		$this->ch = curl_init();

		curl_setopt( $this->ch, CURLOPT_PROXYTYPE, CURLPROXY_SOCKS5 );
		curl_setopt( $this->ch, CURLOPT_PROXY, $torSocks5Proxy );
		curl_setopt( $this->ch, CURLOPT_SSL_VERIFYPEER, false );
		curl_setopt( $this->ch, CURLOPT_FOLLOWLOCATION, true );
		curl_setopt( $this->ch, CURLOPT_RETURNTRANSFER, false );
		curl_setopt( $this->ch, CURLOPT_HEADER, false );


	public function curl( $url, $postParameter = null ) {

		if( sizeof( $postParameter ) > 0 )
			curl_setopt( $this->ch, CURLOPT_POSTFIELDS, $postParameter );

		curl_setopt( $this->ch, CURLOPT_URL, $url );
		return curl_exec( $this->ch );


	function __destruct() {

		curl_close( $this->ch );



Use the Proxy class for a GET request.

$proxy = new Proxy();
echo $proxy->curl( "" );

Use the Proxy class for a POST request

$proxy = new Proxy();
$parameter = array(
	'parameter1' => 'value1',
	'parameter2' => 'value2'
echo $proxy->curl( "", $parameter );

This comment has been minimized.

Copy link

atefBB commented Mar 22, 2018

Thanks, that's helps !
@sxss I added the ability to change the proxy identity, see


This comment has been minimized.

Copy link

tridento commented Aug 30, 2018

you cant resolve .onion sites with $torSocks5Proxy = "socks5://";
replace it with $torSocks5Proxy = "";
and it works like a charm.


This comment has been minimized.

Copy link

akadi81 commented Oct 2, 2018

It's not working with php 7.2

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.