Загрузить onion сайт через fsockopen

Рейтинг: 0Ответов: 1Опубликовано: 22.02.2015

Есть небольшой скрипт на php:

<?php

 $proxy_ip = "127.0.0.1"; 

 $proxy_port = 8118; 

 $proxy_login="";

 $proxy_passw="";

 $host = "www.google.ru";

 $port = 80;

 $request_url =
 "http://www.google.ru/";

 $timeout = 30;

 $eol="\r\n";

 if($proxy_ip){

     $fp = fsockopen($proxy_ip, $proxy_port, $errno, $errstr,
 $timeout);// connect to proxy

 }else{

     $fp = fsockopen($host, $port, $errno, $errstr, $timeout);

 }

 if (!$fp) {

     throw new Exception("Ошибка соединения: ($errno) $errstr ");

 } 

     $out = "GET $request_url HTTP/1.1".$eol;

     $out .= "Host:$host:$port".$eol;

     if($proxy_login!=""){

         $out .= "Proxy-Authorization: Basic
 ".base64_encode("$proxy_login:$proxy_passw").$eol;

     }    

     $out .= "Connection: Close".$eol;

     $out .= $eol;

     fwrite($fp, $out);

     while (!feof($fp)) {

         echo fgets($fp, 1024);

     }

     fclose($fp);

 ?>

На порту 8118 весит Polipo, а она уже смотрит на Tor. Так вот собственно вопрос, обычные сайты загружаются, но при попытке загрузить onion сайты получаю ошибку 502, в чем может быть проблема?

Ответы

▲ 1

Решение без использования fsockopen, используем cURL

class Main {
    public function __construct () {
        $this->viaProxy("http://www.google.com/", '127.0.0.1', '3128');
    }

    public function viaProxy ($url, $proxy_addr = NULL, $proxy_port = NULL, $proxy_auth = NULL) {
        $curl = curl_init($url);

        if ($curl === FALSE) {
            throw new Exception("Error on curl_init($url)");
        }
        curl_setopt($curl, CURLOPT_HEADER, TRUE);
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, FALSE);
        if ($proxy_addr) {
            curl_setopt($curl, CURLOPT_PROXYTYPE, CURLPROXY_HTTP);
            curl_setopt($curl, CURLOPT_PROXY, $proxy_addr);
            if ($proxy_port) {
                curl_setopt($curl, CURLOPT_PROXYPORT, $proxy_port);
            }
            if ($proxy_auth) {
                curl_setopt($curl, CURLOPT_PROXYAUTH, $proxy_auth);
            }
        }
        if (curl_exec($curl) === FALSE) {
            throw new Exception("Error on curl_exec:" . curl_error($curl));
        }
    }
}

try {
    new Main;
}
catch (Exception $e) {
    echo "$e";
}