Muchas veces quiero automatizar las consultas http. Actualmente uso Java (y el cliente http de commons), pero probablemente preferiría un enfoque basado en scripts. Algo realmente rápido y simple. Donde puedo establecer un encabezado, ir a una página y no preocuparme por configurar todo el ciclo de vida de OO, configurar cada encabezado, llamar a un analizador html ... Estoy buscando una solución en CUALQUIER idioma, scripting preferibleScripting HTTP de manera más eficiente
Respuesta
¿Qué hay de usar PHP + Curl, o simplemente bash?
Python urllib puede ser lo que estás buscando.
De forma alternativa, powershell expone la biblioteca .NET HTTP completa en un entorno de scripting.
A menudo, la gente necesita urllib2 más que urllib. –
Mechanize para Python parece fácil de usar: http://wwwsearch.sourceforge.net/mechanize/
Mecanizar para Ruby también funciona bien. –
También parece existir para Perl también. – emil
Tenga una mirada en Selenium. Genera código para C#, Java, Perl, PHP, Python y Ruby si necesita personalizar el script.
del código que se genera, ¿qué bibliotecas http usan? ¿Los predeterminados o los que les gusta mecanizar? – Zombies
Selenium tiene una biblioteca contenedora para cada uno de los idiomas. – jbochi
Por lo que yo entiendo Selenium, utiliza un navegador completamente deslumbrado como Firefox. Esto me parece como matar a un ratón con una bomba nuclear. – johannes
Watir suena cerca de lo que quiere aunque en realidad abre un navegador para hacer cosas (como el enlace Selenium en otra respuesta). Puede ver algunos ejemplos here. Otro sistema de enfoque de reproducción de grabación + registro basado en navegador es sahi.
Si su aplicación es usa WSGI, entonces paste es una buena opción.
Mecanizar vinculado a en otra respuesta es un "navegador en una biblioteca" y hay clones en perl, Ruby y Python. El de Perl es el original y este parece ser el camino a seguir si no desea quiere un navegador. El problema con este enfoque es que no se ejercerá todo el código de front-end (que podría depender de JavaScript).
¿Tiene httpunit para Java ejecutar JavaScript? – Zombies
Además, cuando abre un navegador ... ¿se convierte en una ventana activa y manipula los clics/eventos? – Zombies
Nunca lo usaste. A menos que haya un navegador involucrado (o que cargue un intérprete de JS de alguna manera), no creo que lo haga. –
Algunos rubí bibliotecas:
- httparty: realmente interesantes, la filosofía es interesante.
- mechanize: clásica biblioteca de automatización web de buena calidad.
- scrubYt: desconcertante a primera vista, pero divertido de usar.
Mi turno: wget o perl con lwp. Encontrará ejemplos en la página vinculada.
Dependiendo de exactamente lo que esté haciendo, la solución más fácil parece ser bash + curl.
La página del manual para el último está disponible aquí:
http://curl.haxx.se/docs/manpage.html
Usted puede hacer mensajes, así como consigue, HTTPS, se muestran los encabezados, el trabajo con las cookies, básico y digerir la autenticación HTTP, túnel a través de todo tipos de proxies, incluido NTLM en * nix, entre otras cosas.
curl también está disponible como biblioteca compartida con soporte C y PHP.
HTH
C.
Estoy probando APIs REST en el momento y encontrado el ReST Client muy agradable. Es un programa de GUI, pero aún así puede guardar y restaurar consultas como archivos XML (o dejarlos generar), incrustar, escribir scripts de prueba, etc. Y está basado en Java (que no es una ventaja ad-hoc, pero usted lo mencionó).
Puntos negativos para las sesiones de grabación. El cliente ReST es bueno para "one-shots" sin estado.
Si no se ajusta a sus necesidades, elegiría el ya mencionado Mechanize (o WWW-Mechanize, como se llama en CPAN).
Twill es bastante bueno y está hecho para probar. Se puede usar como script, en una sesión interactiva o dentro de un programa de Python.
Si tiene necesidades simples (buscar una página y analizarla), es difícil superar LWP::Simple y HTML::TreeBuilder.
use strict;
use warnings;
use LWP::Simple;
use HTML::TreeBuilder;
my $url = 'http://www.example.com';
my $content = get($url) or die "Couldn't get $url";
my $t = HTML::TreeBuilder->new_from_content($content);
$t->eof;
$t->elementify;
# Get first match:
my $thing = $t->look_down(_tag => 'p', id => qr/match_this_regex/);
print $thing ? $thing->as_text : "No match found\n";
# Get all matches:
my @things = $t->look_down(_tag => 'p', id => qr/match_this_regex/);
print $_ ? $_->as_text : "No match found" for @things;
Yup, LWP y HTML :: TreeBuilder generalmente van de la mano. –
@Leonardo, como chocolate y mantequilla de maní, bien por sí mismos, pero mejores juntos. – daotoad
Perl y WWW::Mechanize pueden hacer Web raspado, etc simple y fácil, incluyendo un fácil manejo de las formas (Digamos que usted quiere ir a una página de inicio de sesión, rellene un nombre de usuario y contraseña y enviar el formulario, el manejo de las galletas/identificadores de sesión ocultos del mismo modo que un navegador ...)
De manera similar, encontrar o extraer enlaces de la página captada es trivial.
Si necesita analizar cosas de las páginas resultantes que WWW :: Mechanize no puede ayudar fácilmente, entonces alimente el resultado al HTML::TreeBuilder para facilitar el análisis.
- 1. manera más eficiente de analizar este lenguaje de scripting
- 2. ¿La manera más eficiente de crear miniaturas?
- 3. Manera más eficiente de monitorear una cola
- 4. manera más eficiente de extraer una cadena
- 5. Android cargando imágenes al servidor de la manera más eficiente
- 6. ¿La manera más eficiente de nombrar un avatar de usuario?
- 7. La manera más eficiente de hacer un registro de actividad
- 8. ¿La manera más eficiente de indexar una matriz devuelta?
- 9. ¿Existe alguna manera más eficiente de obtener un método anotado?
- 10. La manera más eficiente de convertir BCD a binario
- 11. manera más eficiente para encontrar y alquitrán millones de archivos
- 12. ¿Cómo verificar la matriz idéntica de la manera más eficiente?
- 13. La manera más eficiente de invertir una matriz numpy
- 14. ¿La manera más eficiente de contar las ocurrencias?
- 15. ¿La manera más eficiente de obtener varios hashes en Redis?
- 16. manera más eficiente para extraer componentes de la dirección
- 17. ¿La manera más eficiente de almacenar URLs en Mysql?
- 18. ¿La manera más eficiente de dibujar objetos idénticos múltiples?
- 19. Manera más eficiente de procesar una cola con hilos
- 20. lenguaje de programación de scripting más rápido?
- 21. más eficiente jquery
- 22. ¿Cómo puedo poner en práctica esta manera más eficiente
- 23. manera eficiente de implementar paginación
- 24. Manera eficiente de resolver Cryptarithms
- 25. ¿Cómo implementaría la cola de manera eficiente?
- 26. Android - ¿Qué es más eficiente?
- 27. ¿Cómo incluir config.php de manera eficiente?
- 28. ¿Forma más eficiente de contar intersecciones?
- 29. Java: almacenar de manera eficiente boolean [32]?
- 30. ¿Cómo mantener solo duplicados de manera eficiente?
Tienes una ráfaga de respuestas de escopeta porque en realidad hay muchos productos bonitos en este espacio, diseñados para diferentes casos de uso. ¿Por qué quieres automatizar las consultas HTTP? ¿Qué estás haciendo con las respuestas? ¿Alguna vez * necesita * establecer encabezados HTTP en las solicitudes o ver encabezados en la respuesta? ¿Está siempre bien seguir las redirecciones silenciosamente, o necesita saber sobre ellas? ¿Necesita funciones del navegador como DOM y JavaScript? Etc. –
Varía. En casa, a veces veo un punto en la automatización de ciertas cosas (pero no en el sentido de las macros de Firefox), siempre me ha gustado tratar con httpbots. Mi primer programa fue una araña. En el trabajo, necesitamos algunas pruebas de unidad http. En cuanto a las respuestas, sí, esta será una buena lectura por un par de días. – Zombies
¿Se puede convertir esto en una wiki? Realmente no hay 1 respuesta que pueda ser aceptada. – Zombies