Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > PHP
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 03.10.2011, 08:47   #1
dem66
Форумчанин
 
Регистрация: 31.05.2011
Сообщений: 316
Восклицание CURL + gthtlfxf post запроса от одного скрипта другому. ведучий роздает задания для ведомых в цикле

CURL + передача post запроса от одного скрипта другому. ведучий роздает задания для ведомых в цикле

Добрый день форумчанам.
Вобшем пишу одну системку, типа БотНета. Есть потребность обмениватся POST параметрами. Использую для этого курл.

На ведучем сервере стоит определенная система роздачи которая из базы вытягивает рамдомно определенные данные и перебирая доступные сервера в цикле передает им эти данные.

Так вот нужно чтобы ведомый после того как примет пост выполнил определенную задачу. Она может длится минуты 3.

Нужно сделать так чтобы ведучий не ожидал ответа сервера.

Есть уже все написанное. Но Ведомый ничего не выполняет. Когда проверяю пришедшие пост параметры то вроде все отлично доходит. а вот при выполнении задачи которая заложена в этом скрипте ничего не происходит. такое чувство что скрипт принял параметры и завершил работу. или они воще не дошли.

Когда проверяю на локальной машине сам модуль который принимает параметры записав эти данные уже напрямую в нем то все выполняется. а вот при ПОСТ - болт.

Возможно ли что то такое реализовать? знаю что возможно но вот подходящий код пока сделать не получилось.

Вот curl:
PHP код:
class Http
{    
    
    public function 
SetCookie($cookie_file_name)
    {
        
$this->iOptions['CURLOPT_COOKIEFILE'] = $cookie_file_name;
        
$this->iOptions['CURLOPT_COOKIEJAR'] = $cookie_file_name;
        
        return 
$this;
    }
    
    public function 
EchoResult($cmd)
    {
        
$this->iOptions['EchoResult'] = $cmd;
        
        return 
$this;
    }
    
    public function 
SetTimeout($time)
    {
        
$this->iOptions['CURLOPT_CONNECTTIMEOUT'] = $time;
        
$this->iOptions['CURLOPT_TIMEOUT'] = $time;
        
        return 
$this;
    }
    
        public function 
SetHEADER($cmd)
    {
        
$this->iOptions['HEADER'] = $cmd;

        return 
$this;
    }
    
    
    public function 
SetType($type)
    {
        
$this->iOptions['CURLOPT_PROXYTYPE'] = $type;
        
        return 
$this;
    }
    
        public function 
SetReferer()
    {
        
        
$this->iOptions['REFERER'] = Referer::GetRnd();
        
        return 
$this;
    }

public function 
PostCurl($url$proxy=NULL$params=NULL){
        
//$user = UserAgents::GetRnd();
        //$ref = Referer::GetRnd();
        
        
$ch curl_init();
        
//$url = $url.'?'.$params;
        
curl_setopt($chCURLOPT_URL$url);
    if(
$this->iOptions['HEADER']==1){
        
curl_setopt($chCURLOPT_HEADERtrue);
    }else{
        
curl_setopt($chCURLOPT_HEADERfalse);
    }
        
curl_setopt($chCURLOPT_ENCODING,"");
    if(
$this->iOptions['EchoResult']==1){
        
curl_setopt($chCURLOPT_RETURNTRANSFER1);
    }
        
//curl_setopt($ch, CURLOPT_AUTOREFERER, true);
        //curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 120);
        //curl_setopt($ch, CURLOPT_TIMEOUT, 120);
        //curl_setopt($ch, CURLOPT_REFERER, $url);

        
if(!empty($this->iOptions['CURLOPT_COOKIEFILE'])){
            
curl_setopt($chCURLOPT_COOKIEFILE$this->iOptions['CURLOPT_COOKIEFILE']);
            
curl_setopt($chCURLOPT_COOKIEJAR$this->iOptions['CURLOPT_COOKIEJAR']);
       }
         
        if(!empty(
$this->iOptions['CURLOPT_CONNECTTIMEOUT'])){
         
curl_setopt($chCURLOPT_CONNECTTIMEOUT$this->iOptions['CURLOPT_CONNECTTIMEOUT']);
         
curl_setopt($chCURLOPT_TIMEOUT$this->iOptions['CURLOPT_TIMEOUT']);
       }
  
        
//curl_setopt($ch, CURLOPT_USERAGENT, $user);
        
curl_setopt($chCURLOPT_POST1);
        
curl_setopt($chCURLOPT_POSTFIELDS$params);

           if(!empty(
$this->iOptions['CURLOPT_PROXYTYPE'])){
        
curl_setopt($chCURLOPT_PROXYTYPE$this->iOptions['CURLOPT_PROXYTYPE']);
    }

        if(!empty(
$proxy)){
        
//curl_setopt($ch, CURLOPT_PROXYTYPE, $type);
        
curl_setopt($chCURLOPT_PROXY$proxy);
        }
        
        if(
$this->iOptions['EchoResult']==1){
        
$result curl_exec($ch);
        
$this->iError curl_error ($ch);
        
$this->iHttpStatus curl_getinfo($chCURLINFO_HTTP_CODE);
        
$this->iErrorNo curl_errno($ch);
              
        }else{
        
          
curl_exec($ch);
}
        
//$page = $this->curl_redirect($ch);
        
        
curl_close($ch);
//$page='';
if($this->iOptions['EchoResult']==1){
return array(
'Error'=>$this->iError'ErrorNo'=>$this->iErrorNo'status'=>$this->iHttpStatus'content'=>$result);
    }


Вот роздача:
PHP код:
$curl = new Http;
 do{
$params'url='.urlencode($url[0]).'&proxy='.urlencode($proxy[0]);
$curl->SetTimeout(10);
        
$curl->EchoResult(0);
        
$curl->SetHEADER(0);
        
$curl->SetReferer();
$curl->PostCurl($servers[$rand]['server'], ''$params);
}while(
$count_good != $url[1] * $proxy[1]-10);
unset(
$curl); 
Или может сделать вот так? ->

PHP код:
 do{
$params'url='.urlencode($url[0]).'&proxy='.urlencode($proxy[0]);
$curl = new Http;
$curl->SetTimeout(10);
        
$curl->EchoResult(0);
        
$curl->SetHEADER(0);
        
$curl->SetReferer();
$curl->PostCurl($servers[$rand]['server'], ''$params);
unset(
$curl);
}while(
$count_good != $url[1] * $proxy[1]-10); 
Это конешно не весь код. но это самое основное

Последний раз редактировалось dem66; 03.10.2011 в 10:56.
dem66 вне форума Ответить с цитированием
Старый 03.10.2011, 10:56   #2
dem66
Форумчанин
 
Регистрация: 31.05.2011
Сообщений: 316
По умолчанию

Есть также вариант на сокетах. Тоже вроде бы рабочий.
PHP код:
public function PostSocket($url$proxy$data){
        
$user UserAgents::GetRnd();
            
// так выглядит запрос   
            
$path parse_url($url);
            
            
//$connect = gethostbyname('http://'.$path['host']);
            
$connect 'www.'.$path['host'];

        
//$head = "CONNECT ".$connect." HTTP/1.1\r\n";      

        // соединяемся с прокси сервером    
        
$proxy explode(':'$proxy);
        
$fp fsockopen($proxy[0], $proxy[1], $mes1$mes2$this->iOptions['CURLOPT_CONNECTTIMEOUT']);    
    
     
// Проверяем успешность установки соединения
        
if($fp) {// если все cool, то... 
        
        // Заголовок HTTP-запроса
$headers 'POST '.$path['path']." HTTP/1.1\r\n"
$headers .= 'Host: '.$path['host']."\r\n";
$headers .= "Accept: */*\r\n";
$headers .= "User-agent: $user\r\n";
if(!empty(
$this->iOptions['REFERER'])){
$headers .= "Referer: ".$this->iOptions['REFERER']."\r\n";
}else{
$headers .= "Referer: $url\r\n";
}
$headers .= "Cache-Control: no-cache\r\n"
$headers .= "Content-type: application/x-www-form-urlencoded\r\n";
$headers .= 'Content-Length: '.strlen($data)."\r\n\r\n";
// Отправляем HTTP-запрос серверу
fwrite($fp$headers.$data);
           
// читаем 65000 байт 
$returndata=NULL;
     if(
$this->iOptions['EchoResult']==1){  
         
$returndata fread($fp65000); 
     }  
           
// закрываем соединение    
           
fclose($fp);    
        }
         
return array(
$returndata$mes1$mes2);

dem66 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
создание скрипта для копирования данных из одного документа в другой artem_b Microsoft Office Excel 5 20.02.2012 18:02
Проблемы с POST запросом через cURL LonRv PHP 0 28.12.2009 17:56
COM-объекты в MS Script Control. Присвоение метода одного объекта другому объекту. Антон Ю.Б. Общие вопросы Delphi 1 04.04.2009 13:41
Отмена прокрутки при переходе от одного компонента к другому sim_84 Компоненты Delphi 1 03.02.2009 20:34
Присвоение значения одного поля другому frai БД в Delphi 2 20.09.2007 15:03