Skip to content

Instantly share code, notes, and snippets.

@IsaevDimka
Created August 27, 2019 06:30
Show Gist options
  • Select an option

  • Save IsaevDimka/f7499a47ec96eeba8ee695984a2e48a7 to your computer and use it in GitHub Desktop.

Select an option

Save IsaevDimka/f7499a47ec96eeba8ee695984a2e48a7 to your computer and use it in GitHub Desktop.
<?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