¿Automatizar solicitudes web usando curl?


13

Tengo algunos sistemas "corporativos" que tengo que usar en el trabajo. Algunos de ellos son terribles, con marcos, ventanas emergentes y demás.

Estaba pensando en automatizar algunas cosas usando curl o algo así. Necesito iniciar sesión, hacer clic en hipervínculos, establecer algunos datos y hacer alguna publicación.

¿Es posible usar curl? ¿O voy a ser mejor usando algo como Selenium?


1
Usaría zope.testbrowser de Python para eso.
phunehehe

2
¿Necesitas poder usar Javascript?
intuido


2
Usar una sesión es solo enviar la identificación de la sesión con cada solicitud. Ya sea en una cookie o en el parámetro GET. wgety curlpuede usar el archivo de cookies de Netscape, por lo que si su navegador también usa uno de estos, puede ser suficiente para especificarlo al descargador. Entonces, ¿qué tipo de navegador estás usando?
manatwork

2
No hay suerte para una solución simple con esos. Firefox y Chrome usan SQLite, Opera tiene un formato de archivo de datos binarios. Parece que tendrá que buscar la identificación de la sesión y pasarla manualmente al descargador.
manatwork

Respuestas:


13

Sí, es totalmente posible con curl. Lo más importante será guardar y volver a cargar las cookies entre los usos de curl con --cookie-jar. También puede publicar datos de formulario según sea necesario. Normalmente uso un complemento de Firefox llamado Live HTTP Headers para capturar lo que sucede cuando navego por un sitio web. Grabará cualquier encabezado, pero también cualquier publicación en el formulario, lo cual es muy útil cuando se trata de averiguar qué hacer con curl. He escrito scripts de bash que automatizan varias invocaciones de rizo y uso tuberías y archivos temporales (cortesía de mktemp) para hacer un procesamiento limitado en la página web, pero si tengo que hacer mucho procesamiento de la página web, generalmente cambio a Perl con LibWWW.


Además de los encabezados HTTP de Firefox Live, tanto Safari como Chrome pueden mostrar los encabezados desglosados ​​por objeto en el Inspector web.
bahamat

15

Para casos simples de descarga del contenido de una página, use curl o wget . Ambas son herramientas de línea de comandos diseñadas para descargar archivos a través de HTTP y tienen muchas opciones. En su caso, es probable que necesite hacer que estas herramientas se parezcan más a un navegador; La respuesta de lutzky y la respuesta de penguin359 mencionan algunas opciones de curl y wget que son útiles a ese respecto.

A veces, cuando necesita iniciar sesión , es mucho más fácil iniciar sesión manualmente en un navegador web, luego exportar las cookies del navegador web ( pueden ayudar extensiones como allcookies o Export Cookies for Firefox).

Si necesita analizar el contenido de algunas páginas o publicar formularios , es posible que necesite herramientas más sofisticadas que curl y wget. Algunas buenas herramientas son Perl con LWP(libwww) y HTML::TreeBuilder(HTML-Tree) o Python con bibliotecas estándar (especialmente httplibyhtmllib ).

Para interacciones más complejas con un sitio web, la referencia es Perl's WWW :: Mechanize . Esta biblioteca de Perl define funciones de alto nivel para interactuar con un sitio web como lo hace un navegador web, incluyendo POSTing, formularios, cookies, pero no Javascript. Si Perl no es su taza de té, esta biblioteca tiene imitaciones con capacidades similares en otros idiomas, como Python Mechanize y Ruby Mechanize .

Finalmente, cuando necesita Javascript , el enfoque habitual es utilizar un navegador web impulsado por un marco de automatización del navegador. Selenium y Watir son opciones populares; ver también ¿Hay alguna buena herramienta además de SeleniumRC que pueda obtener páginas web, incluido contenido post-pintado por JavaScript?


6

Mi favorito es wget, así que daré un ejemplo con eso. Lo que quiere hacer es replicar la sesión de su navegador lo más cerca posible, así que use los argumentos relevantes de la línea de comandos. Los que son necesarios dependen de cuán exhaustivamente el sitio verifique su navegador. --referer(sic) suele ser suficiente, pero es posible que también necesite --user-agenty --load-cookies.

Esta técnica es básicamente una suplantación de identidad del navegador: está tratando wgetde presentarse en el sitio como el navegador. El mayor problema que enfrentará es CAPTCHA, que no está presente en el sitio de ejemplo que ha proporcionado. Además, asegúrese de cumplir con las políticas de tiempo del sitio (45 segundos en este caso), o probablemente se bloqueará.

Probablemente no sea ​​posible descargar el mismo archivo en diferentes sesiones: el sitio otorga privilegios de descarga en el archivo específico a una sesión específica.


Buena respuesta con consideraciones integrales. Gracias
xiaohan2012
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.