Как объединить несколько запросов cURL в один?

0

Это код, который я использую в настоящее время

function curl_get_contents($url) {
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_HEADER, 0);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
    curl_setopt($ch, CURLOPT_URL, $url);
    $data = curl_exec($ch);
    return $data;
}

function meta_scrap($filename, $other, $programming) {
    $link = 'https://graph.facebook.com/?id=' . $filename . '&scrape=true&method=post';
    $output = curl_get_contents($link);
    $output = json_decode($output);
    $ogtitle = $output->title;
}

Я называю meta_scrap($filename); 8 раз на одной веб-странице. Это делает загрузку страницы очень медленной. Есть ли что-то, что я могу с этим поделать? Я читал о curl_multi_init() Я пытался использовать его так

function curl_get_contents($pages) {
    $ch = curl_init();
    $ch = array();
    $mh = curl_multi_init();
    for ($i = 0; $i < count($pages); $i++) {
        $page = $pages[$i];
        $ch[$i] = curl_init();
        curl_setopt($ch, CURLOPT_HEADER, 0);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($ch, CURLOPT_URL, $page);
        curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
        curl_multi_add_handle($mh, $ch[$i]);
    }

    $running = 0;
    do {
        curl_multi_exec($mh, $running);
    } while ($running > 0);

    $data = curl_exec($ch);
    $results = reset(json_decode(curl_multi_getcontent($ch[$i]), true));
    $resultCount = count($results);

    curl_close($ch);
    return $data;
}

С этим я не получаю выход? Может ли кто-нибудь помочь мне изменить мой код, чтобы он дал правильный результат?

Теги:
curl

2 ответа

1

Кажется, вы начали работать с несколькими запросами, а затем вырезали и вставляли один обработчик запросов curl:

$data = curl_exec($ch);
$results = reset(json_decode(curl_multi_getcontent($ch[$i]), true));
$resultCount = count($results);

.... но я не могу представить, где бы вы нашли фрагмент кода, который использует reset() следующим образом.

Вы пытаетесь поместить ответ в $ results, но затем вы отбрасываете этот массив и возвращаете что-то совершенно другое.

Попробуй это....

...
$running = count($pages);
do {
   curl_multi_exec($mh, $running);
   usleep(5000);
} while ($running > 0);

$responses=array();
for ($i = 0; $i < count($pages); $i++) {
   $responses[$i]=json_decode(curl_multi_getcontent($ch[$i]), true);
}
return $responses;

Если вы будете повторно использовать функцию, тогда вы должны также удалить и закрыть каждый рулон сгиба, а затем закрыть мультирум перед возвратом.

См. Также мое последнее сообщение в блоге о curl_multi_exec().

0

Я мало знаю, но это, вероятно, поможет вам.

http://arguments.callee.info/2010/02/21/multiple-curl-requests-with-php/

  • 0
    Я уже прочитал это. Я написал свою вторую версию на основе этого кода.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню