Skip to content

Instantly share code, notes, and snippets.

Last active December 2, 2022 20:23
  • Star 26 You must be signed in to star a gist
  • Fork 7 You must be signed in to fork a gist
Star You must be signed in to star a gist
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 );
Copy link

atefBB commented Mar 22, 2018

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

Copy link

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

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