привет, никогда раньше не работал с курл, где приходилось использовать socks4/5. теперь возникла такая необходимость, короче мои действия такие: PHP: 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: PHP: [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 ) )
Проверь рабочие ли прокси и не требуют ли пароля. Если с паролем то: PHP: curl_setopt($curl, CURLOPT_PROXYUSERPWD,' username:pass');
Судя по гуглу, cUrl как то глючно с носками работает, видимо тока по выходным) с Socks5 заставил работать, Socks4 отказывается переваривать .. ЗЫ: curl_setopt($ch, CURLOPT_RETURNTRANSFER, FALSE); PHP: <? $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′
Curlopt_proxytype может принимать только 2 параметра Curlproxy_http (по-дефолту) либо Curlproxy_socks5
всю жизнь использую такую когда-то оч. давно написаную функцию, пока ниразу не подводила - PHP: 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; }