Created
August 27, 2019 06:30
-
-
Save IsaevDimka/f7499a47ec96eeba8ee695984a2e48a7 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| <?php | |
| namespace App\Services; | |
| class CURLServices | |
| { | |
| protected $baseUrl; | |
| protected $defaultHeaders = []; | |
| /** | |
| * CURLServices constructor. | |
| * @param $url | |
| * @param array $headers | |
| */ | |
| public function __construct($url, array $headers = []) { | |
| $this->baseUrl = $url; | |
| $this->defaultHeaders = $headers; | |
| } | |
| /** | |
| * @param $url | |
| * @param string $method | |
| * @param array $params | |
| * @param int $pause_time | |
| * @param int $retry | |
| * @param null $referer_url | |
| * @return mixed | |
| */ | |
| public function send($url, $method = 'GET', array $params = [], $pause_time = 3, $retry = 1, $referer_url = null){ | |
| $url = $this->baseUrl . $url; | |
| return $this->sendRequest($url, $method, $params, $this->defaultHeaders, $pause_time, $retry, $referer_url); | |
| } | |
| /** | |
| * @param $url | |
| * @param string $method | |
| * @param array $params | |
| * @param array $headers | |
| * @param int $pause_time | |
| * @param int $retry | |
| * @param $referer_url | |
| * @return mixed | |
| */ | |
| public function sendRequest($url, $method = 'GET', array $params = [], array $headers = [], $pause_time = 3, $retry = 1, $referer_url) { | |
| /** | |
| * $url - адрес страницы-источника | |
| * $referer_url - адрес страницы для поля REFERER | |
| * $pause_time - пауза между попытками парсинга | |
| * $retry - 0 - не повторять запрос, 1 - повторить запрос при неудаче | |
| */ | |
| $error_page = array(); | |
| $ch = \curl_init(); | |
| $method = strtoupper($method); | |
| switch ($method) { | |
| case 'POST': | |
| $headers[] = 'Content-Type: application/json'; | |
| \curl_setopt($ch, CURLOPT_POST, true); | |
| \curl_setopt($ch, CURLOPT_POSTFIELDS, \json_encode($params)); | |
| break; | |
| } | |
| // \curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:38.0) Gecko/20100101 Firefox/38.0"); | |
| // \curl_setopt($ch, CURLOPT_COOKIEJAR, str_replace("\\", "/", getcwd()).'/gearbest.txt'); | |
| // \curl_setopt($ch, CURLOPT_COOKIEFILE, str_replace("\\", "/", getcwd()).'/gearbest.txt'); | |
| \curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); // Автоматом идём по редиректам | |
| \curl_setopt ($ch, CURLOPT_SSL_VERIFYPEER, false); // Не проверять SSL сертификат | |
| \curl_setopt ($ch, CURLOPT_SSL_VERIFYHOST, false); // Не проверять Host SSL сертификата | |
| \curl_setopt($ch, CURLOPT_URL, $url); // Куда отправляем | |
| \curl_setopt($ch, CURLOPT_REFERER, $referer_url); // Откуда пришли | |
| \curl_setopt($ch, CURLOPT_HEADER, $headers); // headers | |
| \curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); // Возвращаем, но не выводим на экран результат | |
| $info = \curl_getinfo($ch); | |
| if($info['http_code'] != 200 && $info['http_code'] != 404) { | |
| $error_page[] = array(1, $url, $info['http_code']); | |
| if($retry) { | |
| sleep($pause_time); | |
| $response['data'] = \curl_exec($ch); | |
| $info = \curl_getinfo($ch); | |
| if($info['http_code'] != 200 && $info['http_code'] != 404) | |
| $error_page[] = array(2, $url, $info['http_code']); | |
| } | |
| }else{ | |
| $response['data'] = \curl_exec($ch); | |
| // $response['data'] = \substr(\curl_exec($ch), \curl_getinfo($ch, CURLINFO_HEADER_SIZE)); // crop body | |
| } | |
| $response['code'] = $info['http_code']; | |
| $response['errors'] = $error_page; | |
| \curl_close($ch); | |
| return $response; | |
| } | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment