2011-04-03 37 views
9

Normalmente publico datos cuando inicio cURL. Y espero la respuesta, analízalo, etc ...¿Cómo hacer una solicitud de cUrl sin recibir la respuesta?

Quiero simplemente publicar datos y no esperar ninguna respuesta. En otras palabras, ¿puedo enviar datos a una Url, a través de cURL, y cerrar mi conexión de inmediato? (no esperando ninguna respuesta, o incluso para ver si existe la url)

No es algo normal, pero lo estoy preguntando de todos modos.

Esto es lo que tengo hasta ahora:

$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL, $MyUrl); 
curl_setopt($ch, CURLOPT_POSTFIELDS, $data_to_send); 
curl_exec($ch); 
curl_close($ch); 

Respuesta

6

Creo que la única manera de en realidad no recibir toda la respuesta desde el servidor remoto es mediante el uso de CURLOPT_WRITEFUNCTION. Por ejemplo:

$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL, $MyUrl); 
curl_setopt($ch, CURLOPT_POSTFIELDS, $data_to_send); 
curl_setopt($ch, CURLOPT_WRITEFUNCTION, 'do_nothing'); 
curl_exec($ch); 
curl_close($ch); 

function do_nothing($curl, $input) { 
    return 0; // aborts transfer with an error 
} 

Notas importantes

  1. Tenga en cuenta que esto generará una advertencia, como se interrumpirá la transferencia.
  2. Asegúrese de no establecer el valor de CURLOPT_RETURNTRANSFER, ya que esto interferirá con la devolución de llamada de escritura.
6

usted puede hacer esto a través de los curl_multi_* funciones que están diseñados para ejecutar múltiples peticiones simultáneas - acaba de disparar una petición y no se molestan en pedir la respuesta.

No estoy seguro de cuáles son las implicaciones en términos de lo que sucederá si el script se cierra y el curl aún se está ejecutando.

$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL, $MyUrl); 
curl_setopt($ch, CURLOPT_POSTFIELDS, $data_to_send); 
$mh = curl_multi_init(); 
curl_multi_add_handle($mh,$ch); 
$running = 'idc'; 
curl_multi_exec($mh,$running); // asynchronous 
// don't bother with the usual cleanup 
-1

No estoy seguro de si esto ayuda, pero a través de la línea de comandos supongo que podría usar la opción '--max-time' - "Tiempo máximo en segundos que permite que la operación completa tome".

que tenía que hacer algo rápido y sucio y no quieren tener que volver a programar el código o esperar una respuesta, por lo que se encontró la opción en tiempo --max en el manual de rizo

rizo - max-time 1 URL

Cuestiones relacionadas