Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Curl класс

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Описание: при разработке проекта получилось вот такое
Panoptik
Отправлено: 21 Июля, 2014 - 18:07:20
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2493
Дата рег-ции: Нояб. 2011  
Откуда: Одесса, Украина


Помог: 131 раз(а)




стояла задача работать с разными сервисами имитируя работу браузера, то есть логин и выполнение некоторых действий (отправка различных запросов). в результате получилось вот такое дело

Спойлер (Отобразить)


использовал этот объект как свойство класса, и выполнял запросы в различных методах класса, поэтому объект нужен был под рукой и заряжен

инициализация

PHP:
скопировать код в буфер обмена
  1.  
  2. MyClass {
  3.  /**
  4.   * @var CurlRequest
  5.   */
  6.  protected $curl;
  7.  
  8.  public function init() {
  9.      $this->curl = new CurlRequest(array(
  10.             'url' => 'http://site.com'
  11.             'cookieFile' => '/path/to/cookie/file',
  12.         ));
  13.  }
  14.  
  15.  // ... далее в любом методе делаем запросы
  16.  
  17.  public function someAction()  
  18.  {
  19.  
  20.      // post запрос. во втором параметре передаются поля
  21.      // 3 параметр (опциональный) - отправляет заголовок аякс xmlhttprequest
  22.      // 4 параметр (опциональный) - обработает результат как джейсон и вернет декодированные данные
  23.      $json = $this->curl->sendPost('/details/save', array(
  24.             'id' => $id,
  25.             'data' => 'some data',
  26.         ), true, true);
  27.  
  28.     // гет -запрос
  29.     // второй, третий параметры как 3,4 у пост
  30.     $formContent = $this->curl->sendGet('http://site.com', true);
  31.  
  32.    // так же есть возможность послать кастомный запрос с произвольными параметрами курла, но в более удобном (для меня) виде sendRequest
  33.  
  34.  // ну и просто получить ресур курла с предустановленными стандартными опциями
  35.  
  36.   $ch = $this->curl->getCurl($url);
  37.   curl_setopt($ch, ....);
  38.   curl_exec($ch);
  39.   curl_close($ch);
  40.  
  41.  }
  42.  
  43. }
  44.  


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


-----
Just do it
 
 Top
teddy
Отправлено: 21 Июля, 2014 - 22:18:49
Post Id


Участник


Покинул форум
Сообщений всего: 1462
Дата рег-ции: Апр. 2013  


Помог: 91 раз(а)




а почему свойства url и cookieFile публичные? они ж не используются вне контекста класса, есть смысл объявить их как private. тоже самое касается и метода sendRequest.

Методы класса не будут работать без параметра URL, посему странно то, что данный параметр не является обязательным.

Так же отсутствует возможность применять доп. конфигурацию при отправке запроса, может тебе этих параметров и достаточно а кому то может и нет... слишком все зашито..

Это я ещё не слишком придирался Язычок

(Отредактировано автором: 21 Июля, 2014 - 22:20:45)

 
 Top
Panoptik
Отправлено: 21 Июля, 2014 - 22:49:35
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2493
Дата рег-ции: Нояб. 2011  
Откуда: Одесса, Украина


Помог: 131 раз(а)




sendRequest как раз специально и создан для доп конфигурации
что касается свойств, то тут дело не страшное

для меня это удобно. так как имеется набор сайтов и соответственно классов с которыми нужно работать вот так

здесь специально отсутствуют кастомные методы. то есть есть просто 4 метода, которые работают и всё. если кому-то нужно, может с легкостью подкрутить под себя или усовершенствовать.

людей часто интересуют вопросы как курлом что-то делать. почему бы не рассмотреть это как пример. при этом этот пример в моем случае приносит непосредственную пользу и работает в живом проекте

ну и отсутствие каких-либо зависимостей делает этот кусок кода вполне самодостаточным и пригодным для использования где угодно


-----
Just do it
 
 Top
armancho7777777 Супермодератор
Отправлено: 23 Июля, 2014 - 18:32:21
Post Id



Активный участник


Покинул форум
Сообщений всего: 4526
Дата рег-ции: Февр. 2011  
Откуда: Москва


Помог: 221 раз(а)




Зачем инициализировать curl каждый раз в методе getCurl ?
Достаточно одного раза в конструкторе.

А в соответствующих методах использовать дискриптор.
PHP:
скопировать код в буфер обмена
  1. // ....
  2. curl_setopt($this->_ch, CURLOPT_URL, $url);

Ну и метод для краткости:
PHP:
скопировать код в буфер обмена
  1. public function setopt($key, $val) {
  2.    curl_setopt($this->_ch, $key, $val);
  3.    return $this;
  4. }
 
 Top
Ch_chov
Отправлено: 23 Июля, 2014 - 18:49:44
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2121
Дата рег-ции: Июль 2008  
Откуда: из города


Помог: 90 раз(а)




Panoptik пишет:
хотя уверен что в сети полно подобного хлама. но имхо свое было понятней и быстрее
Есть такой очень популярный http клиент для PHP с хорошей документацией — Guzzle.
 
 Top
Panoptik
Отправлено: 23 Июля, 2014 - 18:52:37
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2493
Дата рег-ции: Нояб. 2011  
Откуда: Одесса, Украина


Помог: 131 раз(а)




не встречал ранее.
возьму на заметку

единственное что у меня всего около 100 строк, а там целая пачка.
(Добавление)
armancho7777777
а как на счет контроля за установлением свойств? к примеру у меня выполняется 10 запросов. в середине мне нужно отправить заголовок аякс, а после не отправлять. есть легкий способ следать за включенными оптами?


-----
Just do it
 
 Top
armancho7777777 Супермодератор
Отправлено: 23 Июля, 2014 - 19:01:16
Post Id



Активный участник


Покинул форум
Сообщений всего: 4526
Дата рег-ции: Февр. 2011  
Откуда: Москва


Помог: 221 раз(а)




Реализовать метод "lastRequestUrl"
(Добавление)
Panoptik пишет:
а как на счет контроля за установлением свойств?

Записывать всё в массив в методе setopt и устанавливать опции перед самим запросом.
(Добавление)
PHP:
скопировать код в буфер обмена
  1. public function setopt($key, $val) {
  2.         $this->_options[$key] = $val;
  3.         return $this;
  4.     }


И перед запросом:

(Добавление)
Panoptik пишет:
в середине мне нужно отправить заголовок аякс

Реализовать метод "setHeader"
(Добавление)
Так же можно реализовать метод "newInit", в котором, например, клонируется текущий объект перезаписывая/сбрасывая определённые свойства/опции.
(Добавление)
Panoptik пишет:
а после не отправлять

Реализовать метод "setOnlyHeader", или "setOnlyOptions"
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Пользовательские функции »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB