2015-06-25 2 views
1

Если у меня есть 2 прокси:запроса PHP Curl с использованием прокси с различными протоколами

$proxy1 = array('http', 'XXX.XXX.XXX.XXX','8080') и $proxy2 = array('https','YYY.YYY.YYY.YYY','80')

И я запрашивающее: $url1="http://somesite-1.net" и $url2="https://somesite-2.net"

Кода для INIT несколько завитка:

foreach ($urls as $url) { 
      // threads 
      $ch = curl_init($url); 
      curl_setopt($ch, CURLOPT_AUTOREFERER, $_autoreferrer); 
      curl_setopt($ch, CURLOPT_FOLLOWLOCATION, $_follow_loc); 
      curl_setopt($ch, CURLOPT_MAXREDIRS, $_max_redirects); 
      curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);  
      curl_setopt($ch, CURLOPT_HEADER, 0);     

      curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $_connection_timeout);     curl_setopt($ch, CURLOPT_TIMEOUT, $_curl_timeout); 
      curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
      curl_setopt($ch, CURLINFO_HTTP_CODE,  true); 
      curl_setopt($ch, CURLOPT_PROXY,   $this->conf->getProxyIP().":".$this->conf->getProxyPort());  //PROXY  
      curl_setopt($ch, CURLOPT_USERAGENT,  $this->conf->getUserAgent());         
      if($referrer = $this->conf->getReferrer() !== false){             //REFERRER 
       curl_setopt($ch, CURLOPT_REFERER, $referrer); 
      } 



      $tasks[$url] = $ch; 

      curl_multi_add_handle($cmh, $ch); 
     } 

Нужно ли устанавливать протокол прокси-протокола http или https для отправки запроса й? Потому что, когда я, проверяя прокси, используя сокеты, я получаю сообщение о том, что все нормально и прокси работает. Но когда я запрашиваю контент, используя cURL, я получаю контент не от всех прокси. Я думаю, что проблема связана с не установленным протоколом прокси. Я думаю, что мне нужно установить некоторый параметр в cURL, но не знаю, что именно.

ответ

0
/** 
* get curl_setopt() params 
* 
* @since 2015/03/21 Saturday 
* @return array 
*/ 
private function __optSets(){ 
    $this->__setCookie(); 
    // default:GET 
    $options = array(
      CURLOPT_HEADER => 0, 
      CURLOPT_RETURNTRANSFER => true, 
      CURLOPT_PORT => $this->port, 
      CURLOPT_REFERER => $this->reffer, 
      CURLOPT_USERAGENT => $this->userAgent, 
      CURLOPT_ENCODING =>'', 
      CURLOPT_COOKIE =>$this->_cookie, 
      CURLOPT_HTTPHEADER =>$this->_requestHeader, 
      CURLOPT_HTTPGET => true, 
      CURLOPT_POST => false, 
      CURLOPT_CONNECTTIMEOUT => $this->_connect_timeout 
    ); 
    // if:POST 
    if(self::HTTP_MEHTOD_POST === $this->method){ 
     $options[CURLOPT_HTTPGET] = false; 
     $options[CURLOPT_POST] = true; 
     $options[CURLOPT_POSTFIELDS] = $this->_poststr; ////default type:application/x-www-from-urlencoded 
    } 

    // if:HTTPS 
    if ($this->_isHTTPS) { 
     $options [CURLOPT_PORT] = 443; // !Very important 
     $options [CURLOPT_SSL_VERIFYPEER] = false; 
     $options [CURLOPT_SSL_VERIFYHOST] = false; 
    } 

    // if:enableProxy 
    if(true === $this->enableProxy){ 
     $options [CURLOPT_PROXY] = $this->_proxyIP; 
     $options [CURLOPT_PROXYPORT] = $this->_proxyPort; 
    } 

    return $options; 
} 
+0

Это мой класс, вы можете Referer это: https://github.com/phpjungle/iHttp/ – PHPJungle

+0

См метод __optSets(), строка: 282 – PHPJungle

+0

О, спасибо. Я проверю его. Постскриптум красивая фотография профиля – LINKeRxUA

Смежные вопросы