elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Introducción a Git (Primera Parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Desarrollo Web
| | |-+  PHP (Moderador: #!drvy)
| | | |-+  Curl y diferentes peticiones/conexiones
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Curl y diferentes peticiones/conexiones  (Leído 3,398 veces)
dimitrix


Desconectado Desconectado

Mensajes: 4.847



Ver Perfil WWW
Curl y diferentes peticiones/conexiones
« en: 9 Septiembre 2014, 17:14 pm »

Hola a todos!

Os explico, tengo un proyecto y la parte que nos importa del proyecto tiene dos ficheros:

index.php // Llama al fichero curl
curl.php   //  Parsea una web y la guarda en la base de datos

El problema es que que tiene que parsear constantemente webs (tipo bot) y claro hasta que no termina una no pasa a la siguiente...

Así que me gustaría saber cual es la forma más correcta y óptima para que index.php realice 50 peticiones a curl.php, para que se vayan ejecutando 50 curl.php en segundo plano.

Se hacerlo de diferentes formas, pero no creo que sea lo más óptimo ¿Cómo lo haríais vosotros?

Un saludo!


En línea




#!drvy
Moderador
***
Desconectado Desconectado

Mensajes: 5.850



Ver Perfil WWW
Re: Curl y diferentes peticiones/conexiones
« Respuesta #1 en: 9 Septiembre 2014, 17:31 pm »

La verdad es que aquí te vendrían bien threads aunque PHP no esta digamos al nivel de eso xD

Sin embargo, has pensado en utilizar multi_curl ?
http://curl.haxx.se/libcurl/php/examples/multi.html

Saludos


En línea

dimitrix


Desconectado Desconectado

Mensajes: 4.847



Ver Perfil WWW
Re: Curl y diferentes peticiones/conexiones
« Respuesta #2 en: 9 Septiembre 2014, 22:39 pm »

Cuando llegue a casa lo miro, lo que he pensado es hacer algún script .sh que ejecute 50 ficheros por Curl... voy a ver esta noche...
En línea




Graphixx


Desconectado Desconectado

Mensajes: 1.336


Full Stack Developer


Ver Perfil WWW
Re: Curl y diferentes peticiones/conexiones
« Respuesta #3 en: 10 Septiembre 2014, 17:06 pm »

No se si hacer multiples llamadas desde index a curl sirva, dejo esto por aqui:
Hacer un POST Dinamico en PHP [Hacer Post a dos paginas php]
http://foro.elhacker.net/php/hacer_un_post_dinamico_en_php_hacer_post_a_dos_paginas_php-t421006.0.html
En línea

Nada tiene fin solo hay pequeñas pausas, pausas que determinan el comienzo de otros. Graphixx Rōninnovation
JorgeEMX
Ex-Staff
*
Desconectado Desconectado

Mensajes: 2.615



Ver Perfil WWW
Re: Curl y diferentes peticiones/conexiones
« Respuesta #4 en: 14 Septiembre 2014, 06:09 am »

No se si hacer multiples llamadas desde index a curl sirva, dejo esto por aqui:
Hacer un POST Dinamico en PHP [Hacer Post a dos paginas php]
http://foro.elhacker.net/php/hacer_un_post_dinamico_en_php_hacer_post_a_dos_paginas_php-t421006.0.html

No sirve de absolutamente nada.

Para el tema principal, yo te recomendaría algún lenguaje que soporte arquitectura orientada a eventos (como lo es NodeJS, tengo entendido que con Python y Ruby también es posible).
En línea

dimitrix


Desconectado Desconectado

Mensajes: 4.847



Ver Perfil WWW
Re: Curl y diferentes peticiones/conexiones
« Respuesta #5 en: 14 Septiembre 2014, 18:29 pm »

JorgeEMX hay mil maneras de hcaerlo con PHP, tanto con Shell Script como con cron, lo único que digo es que hay que ver cual es la mejor manera...
En línea




JorgeEMX
Ex-Staff
*
Desconectado Desconectado

Mensajes: 2.615



Ver Perfil WWW
Re: Curl y diferentes peticiones/conexiones
« Respuesta #6 en: 14 Septiembre 2014, 21:31 pm »

JorgeEMX hay mil maneras de hcaerlo con PHP, tanto con Shell Script como con cron, lo único que digo es que hay que ver cual es la mejor manera...

Acaso viste de que va la librería que se menciona en el otro tema??

A lo que me refiero que cómo lo están usando en el otro topic no es viable, ya que las llamadas se ejecutan en el orden en que ha sido escritas y hasta que no termina una empieza otra. Aquí te pongo el método principal, y que hace el request, de dicha librería:

Código
  1.    /**
  2.      * Ejecuta el envío de parametros a la página especificada
  3.      * en el parametro 'url'.
  4.      *
  5.      * @param string $url
  6.      * @param bool $execute
  7.      */
  8. function forward($url, $execute = true) {
  9. $max = sizeof($this->params);
  10. $str = "";
  11.  
  12. foreach ($this->params as $key => $value) {
  13. $str .= "<input name=\"{$key}\" type=\"hidden\" value=\"{$value}\">";
  14. }
  15.  
  16. $html =
  17. "<html>".
  18. "<head>".
  19. "<script>".
  20. "function post_forward() {".
  21. ($execute ? "document.getElementById(\"post_form\").submit();" : "").
  22. "}".
  23. "</script>".
  24. "</head>".
  25. "<body onload=\"post_forward()\">".
  26. "<form id=\"post_form\" name=\"post_form\" method=\"{$this->method}\" action=\"$url\" target=\"{$this->target}\">".
  27. "$str".
  28. "</form>".
  29. "</body>".
  30. "</html>";
  31. print $html;
  32. }

Y si quieres algo realmente eficaz para manejar múltiples llamadas usa algún lenguaje de programación que soporte la arquitectura que te comento.
En línea

MinusFour
Moderador Global
***
Desconectado Desconectado

Mensajes: 5.529


I'm fourth.


Ver Perfil WWW
Re: Curl y diferentes peticiones/conexiones
« Respuesta #7 en: 14 Septiembre 2014, 23:08 pm »

Multi curl es una buena idea:

http://php.net/manual/en/function.curl-multi-init.php

Citar
Allows the processing of multiple cURL handles in parallel.

Incluso puedes implementar callbacks con:

Código

Otra forma de hacerlo es con el modo non-blocking de los streams:

http://darklaunch.com/2013/03/23/php-non-blocking-fopen-file-get-contents-using-stream-set-blocking

Código
  1. function call_url($url) {
  2.    // Call the url and return immediately with the length of the data read.
  3.    // Useful for firing off scripts by calling a url.
  4.  
  5.    $fp = fopen($url, 'r');
  6.    stream_set_blocking($fp, 0); // 0 => non-blocking mode
  7.    $data = fread($fp, 8192); // 1024 * 8 = 8192
  8.    fclose($fp);
  9.  
  10.    // Return the amount of data read
  11.    return strlen($data);
  12. }

Recomiendo cURL sobre fopen si lo tienes.
En línea

JorgeEMX
Ex-Staff
*
Desconectado Desconectado

Mensajes: 2.615



Ver Perfil WWW
Re: Curl y diferentes peticiones/conexiones
« Respuesta #8 en: 15 Septiembre 2014, 00:28 am »

Indagando un poco, parece otra muy buena opción usar stream_select http://php.net/manual/es/function.stream-select.php . Viene con PHP por defecto al parecer y en algunos artículos sacados de Google hablan de muy buenos resultados. A mi me ha dado curiosidad y voy hacer algunas pruebas (según entiendo hasta procesos del sistema puedes hacer en paralelo).

http://wezfurlong.org/blog/2005/may/guru-multiplexing/
En línea

dimitrix


Desconectado Desconectado

Mensajes: 4.847



Ver Perfil WWW
Re: Curl y diferentes peticiones/conexiones
« Respuesta #9 en: 15 Septiembre 2014, 01:52 am »

Citar
Acaso viste de que va la librería que se menciona en el otro tema??

Sí, lo ví, pero creo que no te expresaste con claridad.

Gracias por el código.



MinusFour gracias por lo de los callbacks, aunque no lo necesito es más que interesante :-)



Indagando un poco, parece otra muy buena opción usar stream_select

De nuevo gracias por la info :-)
En línea




Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
duda seguridad con cifraje para diferentes conexiones
Dudas Generales
Sargentavs 2 2,887 Último mensaje 16 Junio 2011, 23:42 pm
por Sargentavs
Hacer cURL en respuesta de cURL para posterior scraping.
PHP
goditozor 3 4,524 Último mensaje 1 Septiembre 2014, 20:32 pm
por WHK
Peticiones multiples con cURL
PHP
Shell Root 1 1,540 Último mensaje 26 Agosto 2015, 22:19 pm
por MinusFour
Conecta hasta cuatro conexiones de diferentes operadores a este router
Noticias
wolfbcn 0 837 Último mensaje 25 Septiembre 2015, 21:35 pm
por wolfbcn
Pintar respuesta de peticiones simultaneas dinamicamente con curl
PHP
MetaNoia 6 2,540 Último mensaje 16 Enero 2020, 03:39 am
por @XSStringManolo
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines