Как лучше всего использовать CURLS в php? - PullRequest
0 голосов
/ 06 мая 2018

У меня есть следующий код, в котором я вызываю данные через php CURL.

$URL = '//abc.com';   
$gb = curl_init();
curl_setopt($gb,CURLOPT_URL,$URL);
curl_setopt($gb,CURLOPT_RETURNTRANSFER,1);
curl_setopt($gb,CURLOPT_CONNECTTIMEOUT,10);
curl_setopt($gb,CURLOPT_TIMEOUT,10);
curl_setopt($gb,CURLOPT_SSL_VERIFYPEER,false);
$res = curl_exec($gb);
curl_close($gb);
$data = json_decode($res,true);

Как лучше всего вызвать CURL-запрос, если у меня есть несколько вариантов URL, например?

1). //abc.com
2). //abc.com/abc
3). //abc.com/123

Должен ли я вызывать CURL несколько раз или как определить его в функции php?

Ответы [ 2 ]

0 голосов
/ 06 мая 2018

Вы можете сделать что-то вроде

function curlRequest($url){
   $gb = curl_init();
   curl_setopt($gb,CURLOPT_URL,$url);
   curl_setopt($gb,CURLOPT_RETURNTRANSFER,1);
   curl_setopt($gb,CURLOPT_CONNECTTIMEOUT,10);
   curl_setopt($gb,CURLOPT_TIMEOUT,10);
   curl_setopt($gb,CURLOPT_SSL_VERIFYPEER,false);
   $res = curl_exec($gb);
   $data = json_decode($res,true);
   return $data;
}

$urls = ["http://url1","http://url2","http://url3"];

foreach($urls as $url){

   curlRequest($url);//do something with data

}

Я не вижу разницы в вызове одного и того же домена или другого, поскольку разные маршруты получают разную информацию. Если все эти URL-адреса являются эквивалентами, вам не нужен foreach или решение.

0 голосов
/ 06 мая 2018

Это зависит.

Но если вы подключаетесь к одному и тому же сайту / услуге каждый раз, вы можете свободно использовать одно и то же соединение. Это позволит вам установить параметры подключения только один раз (например, файлы cookie или другие заголовки).

Вы также можете извлечь CURL создание обработчика в отдельную функцию, а затем переключать URL только для определенных запросов.

Ваш код должен выглядеть так:

function init_my_curl() {
    $h = curl_init();

    curl_setopt($h, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($h, CURLOPT_CONNECTTIMEOUT, 10);
    curl_setopt($h, CURLOPT_TIMEOUT, 10);
    curl_setopt($h, CURLOPT_SSL_VERIFYPEER, false);

    return $h;
}

function do_request($handle, $url) {
    curl_setopt($handle, CURLOPT_URL, $url);
    $result = curl_exec($handle);

    return json_decode($result, true);
}

Чем вы звоните:

$curl = init_my_curl();
do_request($curl, '//abc.com');
do_request($curl, '//abc.com/abc');
do_request($curl, '//abc.com/123');
curl_close($curl);

Вы также можете переносить все в классе, но это зависит от используемой версии PHP и стиля вашего кода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...