в чем проблема fsockopen? (via socks proxy)

Статус
В этой теме нельзя размещать новые ответы.
Дружище, тебе принципиально с fsockopen маяться?
Предлагаю юзать для socks-прокси курл, отлично подходит.
Часть из моего скрипта:
Абсолютно ничего сложного. Так же можно и с 4 вроде, но лично я не юзал.
 
я для 5х соксов юзаю сию функцию:

PHP:
function socks_connect($host, $port, $dh, $dp) //адрес скоса, порт сокса, адрес сайта, порт сайта.
{
	$result=true;
	$f = fsockopen($host, $port) or $result=false;
	if($result) 
	{
		$h = gethostbyname($dh);
		preg_match("#(\d+)\.(\d+)\.(\d+)\.(\d+)#", $h, $m);
		fwrite($f, "\x05\x01\x00");
		$r = fread($f, 2);
		if(!(ord($r[0])==5 and ord($r[1])==0)) $result=false;
		if($result)
		{
			fwrite($f, "\x05\x01\x00\x01" . chr($m[1]).chr($m[2]).chr($m[3]).chr($m[4]).chr($dp/256).chr($dp%256));
			$r = fread($f, 10);
			if(!(ord($r[0])==5 and ord($r[1])==0))
				return false;
			else
				return $f;
		}
	}
}
возвращает false если не удалось установить соединение.
использовать так же как fsockopen:

PHP:
$fp=socks_connect('1.2.3.4',1080,'ya.ru',80);
и далее как в примере у автора сабже

$fp=socks_connect('1.2.3.4',1080,'ya.ru',443);

а как организвать поддержку ссл? получчается, запрос выглядит tcp://ya.ru:443 вместо ssl://ya.ru:443 ?
и сервер пишет
Bad Request

Your browser sent a request that this server could not understand.
Reason: You're speaking plain HTTP to an SSL-enabled server port.
Instead use the HTTPS scheme to access this URL, please.

Сокс держит ссл 100%
 
для ssl используй curl. ssl это не просто другой порт :D
 
да не, это понятно... просто думал если можно через fsockopen ssl заюзать то через сокс аналогично. Жестоко ошибся :)

socks - просто туннелирование трафика, не важно что передается

https = ssl over http. включает в себя: установку соединения по http методу connect, обмен авторизационной информацией, установление защищенного канала передачи данных. после выполнения этих процедур все, что пишется в установленное соединение, шифруется перед передачей и все, что читается из такого канала предварительно расшифровавыется и после этого поступает в приложение.
 
Это все теория, а как на практике это реализовать? С курлами понятно все и прозрачно - они сами это делают, а вот как под носками поднять https? те как организовать все эти протоколы? ручками организовывать такие стандартные вещи както лень...
PS: спасибо Karlasan за приер фунции. мне для whois самое то...
 
Это все теория, а как на практике это реализовать? С курлами понятно все и прозрачно - они сами это делают, а вот как под носками поднять https? те как организовать все эти протоколы? ручками организовывать такие стандартные вещи както лень...
PS: спасибо Karlasan за приер фунции. мне для whois самое то...



+из документации по curl для php:
CURLOPT_PROXYTYPE - Either CURLPROXY_HTTP (default) or CURLPROXY_SOCKS5 (Added in cURL 7.10 and PHP 5.0.0.)
 
вобщем разобрался как под курлом юзать хттпс, тут появилсь другая проблемма, апач 1.3.33, Curl: 7.16.0, PHP Version 5.2.2, при попытке юзать куки апач падает

PHP:
//от такого
    curl_setopt($ch, CURLOPT_COOKIEJAR,getcwd().'/cookie.txt');

//и такого
curl_setopt($ch, CURLOPT_COOKIE, $cookie);

сам код
PHP:
<?php
    $url = 'https://www.site.com';
    $user_agent = "Mozilla/4.0 (compatible; MSIE 6.01; Windows NT 5.0)";
    $proxy='127.0.0.1:1080';

    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL,$url);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,  2);
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT,  3);
    curl_setopt($ch, CURLOPT_USERAGENT, $user_agent);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
    curl_setopt($ch, CURLOPT_AUTOREFERER,TRUE);
    curl_setopt($ch, CURLOPT_COOKIEJAR,getcwd().'/cookie.txt');
    curl_setopt($ch, CURLOPT_PROXY, $proxy);
    curl_setopt($ch, CURLOPT_PROXYTYPE, CURLPROXY_SOCKS5);
    curl_setopt($ch, CURLOPT_HTTPPROXYTUNNEL, TRUE);

        $result=@curl_exec ($ch);

    if($result)
    {

    
    preg_match("/<form method=\"post\" name=\"login_form\" action=\"(.*)\">/i", $result, $m);

    $post_data="login=".urlencode('asas')."&password=".urlencode('qwertyuiop');

        $ch2=curl_copy_handle($ch);
        curl_close ($ch);
        curl_setopt($ch2, CURLOPT_COOKIEFILE,getcwd().'/cookie.txt');
        curl_setopt($ch2, CURLOPT_URL,$m[1]);
        curl_setopt($ch2, CURLOPT_POST, 1);
        curl_setopt($ch2, CURLOPT_POSTFIELDS, $post_data);
        curl_setopt($ch2, CURLOPT_FOLLOWLOCATION,TRUE);
        $res2=curl_exec ($ch2);

    } else {
        die (curl_error($ch));
    }


    curl_close ($ch2);

    echo("Results: <br>".$res2);

?>

Есть идеи?
 
вобщем разобрался как под курлом юзать хттпс, тут появилсь другая проблемма, апач 1.3.33, Curl: 7.16.0, PHP Version 5.2.2, при попытке юзать куки апач падает
апач от такого падать не должен попробуй пересобрать или переустановить apache,php,libcurl и curl. А сначала посмотри логи апача- там должна быть информация от чего он упал

Добавлено через 2 минуты
не заметил что у тебя денвер- попробуй указывать абсолютный путь к кукисам:
curl_setopt($ch, CURLOPT_COOKIEJAR,'с:/temp/cookie.txt');
 
Вобщем тема продолжается. Заинсталил на тачку отдельно от денвера апач и пхп, конфигурация сервака:
Apache/2.2.8 (Win32) mod_ssl/2.2.8 OpenSSL/0.9.8g PHP/5.2.5 libcurl/7.16.0 zlib/1.2.3

на строчке
Код:
curl_setopt($ch, CURLOPT_COOKIEJAR,'с:/temp/cookie.txt');
попробовал и абсолютный и относительный пути - при работе с куками каждый раз результат тот же:
 

Вложения

  • xz.JPG
    xz.JPG
    15,8 KB · Просмотры: 2
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху