Класс PHP CURL не принимает параметры объекта

watsongx

Новичок
У меня есть класс для запросов curl. Авторизуется на закрытой странице с помощью метода POST, сохраняет файл cookie, а затем выполняет запрос. GET получает массив данных. Класс разработан для повышения производительности запросов и сокращения времени. То есть мы делаем одно соединение и передаем два запроса GET и POST.
Код:
class Par {


    private $url;
    private $ch;

    public function __construct($print = false){
        $this->ch = curl_init();
        if (!$print){
            curl_setopt($this->ch, CURLOPT_RETURNTRANSFER, true) ;
        }
    }
    public function set($name, $value){
        curl_setopt($this->ch, $name, $value);
        return $this;
    }

    public function exec($url){
        curl_setopt($this->ch,  CURLOPT_URL, $url);
        return curl_exec($this->ch);
    }

    public function __destruct(){
        curl_close($this->ch);
    }
}
$url_auth = 'http://site=user_login';
$url = 'http://site_search&group=1';

$auth_data = array(
    "login" => "login",
    "password" => "pas",
  
);

$parser = new Par();
$parser->set(CURLOPT_POST, true)
       ->set(CURLOPT_POSTFIELDS, http_build_query($auth_data))
      ->set(CURLOPT_FOLLOWLOCATION, 1)
       ->set(CURLOPT_COOKIEJAR, __DIR__ .'/cook.txt')
       ->set(CURLOPT_COOKIEFILE, __DIR__ .'/cook.txt');
    
$data = $parser->exec($url_auth);
print_r($data);

$parser->set(CURLOPT_CUSTOMREQUEST, 'GET')
       ->set(CURLOPT_COOKIEFILE, __DIR__ .'/cook.txt');

$data = $parser->exec($url);
print_r($data);
Этот код выполняет запрос POST. Когда я хочу установить опцию Get, я ничего не получаю. Где ошибка? Как задать параметры объекта класса так, чтобы выполнялись два запроса POST и GET, а соединение было только одним.
 

Squats

Новичок
Откройте для себя curl_setopt_array - Круто, не правда - ли?!
Классно я избавился от бесполезного вашего класса?))
 

WMix

герр M:)ller
Партнер клуба
Как без класса сделать два запроса при одном соединении курлы
это принципиально "при одном соединении"? дело в том, что классический HTTP curl создает socket, отправляет запрос, получает ответ и закрывает socket.
ну те тебе для 2х запросов нужно запускать 2х curl_init();
 

watsongx

Новичок
это принципиально "при одном соединении"? дело в том, что классический HTTP curl создает socket, отправляет запрос, получает ответ и закрывает socket.
ну те тебе для 2х запросов нужно запускать 2х curl_init();
Нет не принципиально. Просто нужно уменьшить время запроса.
 

AnrDaemon

Продвинутый новичок
Откройте для себя curl_setopt_array - Круто, не правда - ли?!
При этом, если в какой-то опции ошибка, ругнётся на весь массив. И иди, гадай, где собака зарыта.

Авторизуется на закрытой странице с помощью метода POST, сохраняет файл cookie, а затем выполняет запрос.
Этого достаточно для сохранения кук на время работы скрипта.

$parser->set(CURLOPT_CUSTOMREQUEST, 'GET') ->set(CURLOPT_COOKIEFILE, __DIR__ .'/cook.txt');

И вообще

PHP:
$url = new AnrDaemon\Net\Url('http://site/user_login');
$curl = new AnrDaemon\Net\Browser([
  CURLOPT_CONNECTTIMEOUT => 5,
  CURLOPT_TIMEOUT => 20,
  CURLOPT_FOLLOWLOCATION => true,
]);
$curl->post($url, $auth_data);
$url = $url->setParts(['path' => '/search', 'query' => ['group' => 1]]);
$result = $curl->get($url);
 

watsongx

Новичок
При этом, если в какой-то опции ошибка, ругнётся на весь массив. И иди, гадай, где собака зарыта.


Этого достаточно для сохранения кук на время работы скрипта.



И вообще

PHP:
$url = new AnrDaemon\Net\Url('http://site/user_login');
$curl = new AnrDaemon\Net\Browser([
  CURLOPT_CONNECTTIMEOUT => 5,
  CURLOPT_TIMEOUT => 20,
  CURLOPT_FOLLOWLOCATION => true,
]);
$curl->post($url, $auth_data);
$url = $url->setParts(['path' => '/search', 'query' => ['group' => 1]]);
$result = $curl->get($url);
Спасибо за помощь. Поскольку я новичок в программировании только учусь. А как запустить эту библиотеку? Я закачал папку, установил composer. Но к сожалению не работает (. Я что-то неправильно сделал. Есть какая-то инструкция?
 
Сверху