2010-12-31 5 views
5

Así que, básicamente, necesito obtener los contenidos de alrededor de 100-200 páginas web. Me gustaría usar curl_multi_ * para poder tomar todo de una vez, pero no estoy seguro de si eso es posible.¿Asir el contenido de múltiples controladores de curl de un curl multi exec?

Sé con curl que acaba de establecer la opción returntransfer en true y ejecutar la ejecución, pero ¿cómo lo haré con curl_multi_ *?

Si es imposible, ¿hay alguna otra forma de hacerlo?

Respuesta

-1

Es un trabajo fácil de hacer con la interfaz multi curl.

interfaz curl_multi proporcionan el tipo de función de agrupación.

Usted inicia una operación de ondulación normal con una interfaz sencilla, se registra en múltiples manejos, realiza múltiples trabajos a la vez, eso es todo.

Si trabajas en PHP, échale un vistazo a la página This (busca en Google con 'curl multiple').

+0

Eso realmente no ayuda en absoluto. – Rob

4

Me tropecé con esto al intentar hacer lo mismo yo mismo. Pensé que agregaría mi solución para ayudar a cualquiera que tenga el mismo problema en el futuro. En primer lugar, voy a suponer que usted tiene una gran variedad de sus controladores de enrollamiento como tal:

$mh = curl_multi_init(); 
$requests = array(); 
foreach ($someArray as $identifier => $url) { 
    $requests[$identifier] = curl_init($url); 
    curl_setopt($requests[$identifier], CURLOPT_RETURNTRANSFER, true); 
    //any other options you need to set go here 
    curl_multi_add_handle($mh, $requests[$identifier]); 
} 

También supongo que ejecutó las solicitudes:

do { 
    $status = curl_multi_exec($mh, $running); 
} while ($status === CURLM_CALL_MULTI_PERFORM || $running); 

Finalmente, se llega a la respuesta a su pregunta:

$returned = array(); 
foreach ($requests as $identifier => $request) { 
    $returned[$identifier] = curl_multi_getcontent($request); 
    curl_multi_remove_handle($mh, $request); //assuming we're being responsible about our resource management 
    curl_close($request); //being responsible again. THIS MUST GO AFTER curl_multi_getcontent(); 
} 

$returned ahora contiene todos sus datos.