PDA

Просмотр полной версии : curl и socks


GreenBear
16.08.2008, 05:40
привет, никогда раньше не работал с курл, где приходилось использовать socks4/5.
теперь возникла такая необходимость,
короче мои действия такие:

curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (X11; U; Linux i686; ru; rv:1.9.0.1) Gecko/2008070206 Firefox/3.0.1');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_TIMEOUT, 30);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HEADER, 1);
if($proxy){
$pr = $proxy_list[array_rand($proxy_list)];
$pr = $pr['ip'].":".$pr['port'];
curl_setopt($ch, CURLOPT_PROXY, $pr);
switch($input['proxytype']){
case 's5':
curl_setopt($ch, CURLOPT_PROXYTYPE, CURLPROXY_SOCKS5);
break;
case 's4':
curl_setopt($ch, CURLOPT_PROXYTYPE, CURLPROXY_SOCKS4);
break;
}

}

$input['proxytype'] и s4 и s5, не работают с ними.
курл отвечает: Empty reply from server.
если использовать обычные http прокси, то работает отлично.

вот нужно решить проблему, почему не работает с соксами :( в сети по этому поводу молчек или гугле мой враг :(

version:
[version_number] => 463360
[age] => 3
[features] => 1597
[ssl_version_number] => 0
[version] => 7.18.0
[host] => i486-pc-linux-gnu
[ssl_version] => OpenSSL/0.9.8g
[libz_version] => 1.2.3.3
[protocols] => Array
(
[0] => tftp
[1] => ftp
[2] => telnet
[3] => dict
[4] => ldap
[5] => ldaps
[6] => http
[7] => file
[8] => https
[9] => ftps
)

)

Shadow_p1raT
16.08.2008, 07:41
глянь тут:
http://www.armadaboard.com/topic14676.html

GreenBear
16.08.2008, 07:57
и чего - там ничего нового.

Chaak
16.08.2008, 12:45
Проверь рабочие ли прокси и не требуют ли пароля. Если с паролем то:
curl_setopt($curl, CURLOPT_PROXYUSERPWD,' username:pass');

BlackSun
16.08.2008, 13:01
Судя по гуглу, cUrl как то глючно с носками работает, видимо тока по выходным) с Socks5 заставил работать, Socks4 отказывается переваривать ..

ЗЫ: curl_setopt($ch, CURLOPT_RETURNTRANSFER, FALSE);


<?
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "http://xakep.ru");
curl_setopt($ch, CURLOPT_TIMEOUT, 60);
curl_setopt($ch, CURLOPT_PROXY, "97.84.1.138:51411");
curl_setopt($ch, CURLOPT_PROXYTYPE, CURLPROXY_SOCKS5);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, FALSE);
$result = curl_exec($ch);
echo $result;
curl_close($ch);
?>


При попытке проюзать Socks4 вываливает -
Notice: Use of undefined constant CURLPROXY_SOCKS4 - assumed ‘CURLPROXY_SOCKS4′

disc
20.08.2008, 02:17
Curlopt_proxytype может принимать только 2 параметра Curlproxy_http (по-дефолту) либо Curlproxy_socks5

presidentua
20.08.2008, 22:10
всю жизнь использую такую когда-то оч. давно написаную функцию, пока ниразу не подводила -

function get_contents($url,$post=''){
global $proxy,$proxy_type;
$url=str_replace(' ','+',$url);
$ch = curl_init();
if ($proxy!=='')
{
if ($proxy_type == 'socks') curl_setopt($ch, CURLOPT_PROXYTYPE, CURLPROXY_SOCKS5);
curl_setopt($ch, CURLOPT_HTTPPROXYTUNNEL, 1);
curl_setopt($ch, CURLOPT_PROXY, $proxy);
}
if ($post!=='')
{
curl_setopt($ch,CURLOPT_POST,TRUE);
curl_setopt($ch,CURLOPT_POSTFIELDS,$post);
}
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HEADER, TRUE);
curl_setopt($ch, CURLOPT_NOBODY, FALSE);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_USERAGENT, "MSIE 7.0");
curl_setopt($ch, CURLOPT_TIMEOUT,30);
$result = curl_exec($ch);
if (curl_errno($ch)!==0)
{
$er=curl_error($ch);
eecho("Error load page = $url ($er)");
$result=false;
};
curl_close($ch);
return $result;
}