Este artículo asume que está familiarizado con los conceptos básicos de redes y el lenguaje HTML.

La capacidad de escribir scripts es esencial para construir un buen sistema informático. La extensibilidad de los sistemas Unix a través de scripts de shell y varios programas que ejecutan comandos automatizados es una de las razones por las que tienen tanto éxito.

El creciente número de aplicaciones que se están trasladando a la web ha llevado al hecho de que el tema de los scripts HTTP se está volviendo cada vez más demandado. Tareas importantes en esta área son la extracción automática de información de Internet, el envío o descarga de datos a servidores web, etc.

Curl es una herramienta de línea de comandos que le permite manipular URL y pasar varios tipos. Este artículo se centra en realizar solicitudes HTTP simples. Se supone que ya sabes dónde marcar

# rizo --ayuda

# rizo --manual

para obtener información sobre curl.

Curl no es una herramienta que hará todo por ti. Crea solicitudes, recibe datos y envía datos. Es posible que necesite algo de "pegamento" para mantener todo unido, tal vez algún lenguaje de secuencias de comandos (como bash) o algunas llamadas manuales.

1. Protocolo HTTP

HTTP es el protocolo utilizado cuando se reciben datos de servidores web. Es un protocolo muy simple que se basa en TCP/IP. El protocolo también permite enviar información al servidor desde el cliente utilizando varios métodos, como se mostrará a continuación.

HTTP son cadenas de texto ASCII enviadas desde un cliente a un servidor para solicitar alguna acción. Cuando se recibe una solicitud, el servidor responde al cliente con varias líneas de texto de servicio y luego con el contenido real.

Usando la opción curl -v, puede ver qué comandos curl envía al servidor, así como otro texto informativo. El interruptor -v es quizás la única forma de depurar o incluso comprender la interacción entre curl y el servidor web.

2.URL

El formato URL (Localizador Uniforme de Recursos - dirección de recurso universal) especifica la dirección de un recurso específico en Internet. Probablemente sepa esto, ejemplos de URL son http://curl.haxx.se o https://yourbank.com.

3. Obtener (GET) página

La solicitud HTTP más simple y común es obtener el contenido de una URL. La URL puede hacer referencia a una página web, una imagen o un archivo. El cliente envía una solicitud GET al servidor y recibe el documento solicitado. Si ejecuta el comando

# curl http://curl.haxx.se

aparecerá una página web en la ventana de su terminal. El documento HTML completo contenido en esta URL.

Todas las respuestas HTTP contienen un conjunto de encabezados que normalmente están ocultos. Para verlos junto con el propio documento, utilice la opción curl -i. También puede solicitar solo encabezados con el interruptor -I (que obligará a curl a realizar una solicitud HEAD).

4. Formas

Los formularios son la forma principal de presentar un sitio web como una página HTML con campos en los que el usuario ingresa datos y luego hace clic en el botón "Aceptar" o "Enviar", luego de lo cual los datos se envían al servidor. Luego, el servidor usa los datos recibidos y decide cómo proceder: buscar la información en la base de datos, mostrar la dirección ingresada en el mapa, agregar un mensaje de error o usar la información para autenticar al usuario. Por supuesto, hay algún programa en el lado del servidor que acepta sus datos.

4.1 OBTENER

El formulario GET usa el método GET, así:

Si abre este código en su navegador, verá un formulario con un cuadro de texto y un botón que dice "Aceptar". Si ingresa "1905" y hace clic en Aceptar, el navegador generará una nueva URL a seguir. La URL será una cadena compuesta por la ruta de la URL anterior y una cadena como "junk.cgi?birthyear=1905&press=OK".

Por ejemplo, si el formulario estaba ubicado en "www.hotmail.com/when/birth.html", al hacer clic en el botón Aceptar lo llevará a la URL "www.hotmail.com/when/junk.cgi?birthyear= 1905&pulse=OK" .

La mayoría de los motores de búsqueda funcionan de esta manera.

Para que curl genere una solicitud GET, simplemente ingrese lo que esperaría del formulario:

# curl "www.hotmail.com/when/junk.cgi?birthyear=1905&press=OK"

4.2 POSTE

El método GET hace que toda la información ingresada se muestre en la barra de direcciones de su navegador. Esto puede estar bien cuando necesita marcar una página, pero es una desventaja obvia cuando está ingresando información secreta en los campos del formulario, o cuando la cantidad de información ingresada en los campos es demasiado grande (lo que resulta en una URL ilegible).

El protocolo HTTP proporciona el método POST. Con él, el cliente envía datos separados de la URL y, por lo tanto, no lo verás en la barra de direcciones.

El formulario que genera la solicitud POST es similar al anterior:

Curl puede formar una solicitud POST con los mismos datos de la siguiente manera:

# curl -d "año de nacimiento=1905&press=%20OK%20" www.hotmail.com/when/junk.cgi

Esta solicitud POST utiliza "Content-Type application/x-www-form-urlencoded", que es la forma más utilizada.

Los datos que envíe al servidor deben estar codificados correctamente, curl no lo hará por usted. Por ejemplo, si desea que los datos contengan un espacio, debe reemplazar ese espacio con %20 y así sucesivamente. La falta de atención a este tema es un error común, por lo que los datos no se transmiten como deberían.

En 1995, se definió una forma adicional de transferir datos a través de HTTP. Está documentado en RFC 1867, por lo que a veces se lo denomina publicación RFC1867.

Este método está diseñado principalmente para admitir mejor la carga de archivos. El formulario que permite al usuario cargar un archivo se ve así en HTML:

Tenga en cuenta que el tipo de contenido está configurado en multipart/form-data.

Para enviar datos a dicho formulario usando curl, ingrese el comando:

# rizo -F [correo electrónico protegido]-Fpulsar=OK

4.4 Campos ocultos

Una forma común de comunicar información de estado en aplicaciones HTML es mediante el uso de campos ocultos en formularios. Los campos ocultos no se rellenan, son invisibles para el usuario y se pasan de la misma forma que los campos normales.

Un ejemplo simple de un formulario con un campo visible, un campo oculto y un botón Aceptar:

Para enviar una solicitud POST con curl, no tiene que pensar si el campo está oculto o no. Para curl son todos iguales:

# curl -d "año de nacimiento=1905&pulse=OK&persona=daniel"

4.5 Averigüe cómo es una solicitud POST

Cuando desee completar un formulario y enviar datos al servidor usando curl, probablemente desee que la solicitud POST se vea exactamente como la que se hizo con el navegador.

Una manera fácil de ver su solicitud POST es guardar la página HTML del formulario en el disco, cambiar el método a GET y presionar el botón "Enviar" (también puede cambiar la URL a la que se enviarán los datos).

Verá que los datos se agregaron a la URL, separados por caracteres "?", como se esperaba al usar formularios GET.

5. PONER

Quizás la mejor manera de cargar datos en un servidor HTTP es usar PUT. Nuevamente, esto requiere un programa (script) en el back-end que sepa qué hacer y cómo aceptar un flujo HTTP PUT.

Envía un archivo al servidor usando curl:

# curl -T uploadfile www.uploadhttp.com/receive.cgi

6. Autenticación

Autenticación: pasar un nombre de usuario y una contraseña al servidor, luego de lo cual verifica si tiene derecho a realizar la solicitud solicitada. La autenticación básica (que curl usa de forma predeterminada) se basa en texto simple, lo que significa que el nombre de usuario y la contraseña no se cifrarán, sino que solo se "empañarán" ligeramente con el algoritmo Base64, lo que permitirá a los atacantes encontrar esta información en el camino entre usted y el servidor HTTP.

Dile a curl que use el nombre de usuario y la contraseña:

# curl -u nombre:contraseña www.secrets.com

El sitio puede requerir el uso de un método de autenticación diferente (vea lo que el servidor escribe en los encabezados), en estos casos, puede usar las claves --ntlm, --digest, --negotiate o incluso --anyauth. A veces, el acceso a los servidores HTTP externos se produce a través de un proxy, como suele hacerse en empresas y firmas. Un proxy HTTP puede requerir su propio nombre de usuario y contraseña para acceder a Internet. Clave de rizo relevante:

# curl -U usuarioproxy:contraseñaproxy curl.haxx.se

Si el proxy requiere autenticación NTLM, especifique --proxy-ntlm, si es el método Digest, entonces --proxy-digest.

Si no especifica una contraseña en las opciones -u y -U, curl se la pedirá de forma interactiva.

Tenga en cuenta que cuando curl se está ejecutando, la cadena de ejecución (y con ella las claves y contraseñas) puede ser visible para otros usuarios en su sistema en la lista de tareas. Hay maneras de prevenir esto. Más sobre eso a continuación.

7. Referencia

Una solicitud HTTP puede incluir un campo de "referencia" que indica la URL desde la cual el usuario llegó a este recurso. Algunos programas/scripts verifican el campo "referer" y no ejecutan la solicitud si el usuario proviene de una página desconocida. Aunque esta es una forma tonta de verificar, muchos scripts la usan de todos modos. Con curl, puedes poner cualquier cosa en el campo "referente" y así forzarlo a hacer lo que quieras.

Esto se hace de la siguiente manera:

# curl -e http://curl.haxx.se daniel.haxx.se

8. Agente de usuario

Todas las solicitudes HTTP admiten un campo "User-Agent" que especifica la aplicación cliente del usuario. Muchas aplicaciones web utilizan esta información para mostrar la página de una forma u otra. Los programadores web crean varias versiones de una página para usuarios de diferentes navegadores con el fin de mejorar la apariencia, utilizan diferentes scripts javascript, vbscript, etc.

A veces puede encontrar que curl devuelve una página que no es la que vio en su navegador. En este caso, es apropiado usar el campo "Agente de usuario" para engañar una vez más al servidor.

Disfraze curl como Internet Explorer en una máquina con Windows 2000:

# curl -A "Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)"

¿Por qué no convertirse en Netscape 4.73 en una máquina Linux (PIII):

# curl -A "Mozilla/4.73 (X11; U; Linux 2.2.15 i686)"

9. Redirecciones

En respuesta a su solicitud, el servidor, en lugar de la página en sí, puede devolver una indicación de dónde debe ir el navegador a continuación para llegar a la página deseada. El encabezado que le dice al navegador esta redirección es "Ubicación:".

De forma predeterminada, curl no va a la dirección especificada en "Ubicación:", sino que simplemente muestra la página como de costumbre. Pero puedes enviarlo así:

# curl -L www.sitioqueredirecciona.com

Si está utilizando curl para enviar solicitudes POST a un sitio que redirige inmediatamente a otra página, puede utilizar con seguridad -L y -d/-F. Curl hará una solicitud POST para la primera página y luego una solicitud GET para la siguiente.

10. Galletas

Las cookies permiten que los navegadores web controlen el estado del lado del cliente. Cookie es un nombre con contenido adjunto. El servidor, al enviar cookies, le dice al cliente la ruta y el nombre del host donde se deben enviar las cookies la próxima vez, le dice la duración de la cookie y algunos otros parámetros.

Cuando un cliente se conecta al servidor en la dirección especificada en la cookie recibida, el cliente envía esa cookie al servidor (si la vida útil no ha expirado).

Muchas aplicaciones y servidores utilizan este método para combinar varias solicitudes en una sesión lógica. Para que curl también realice esta función, debemos poder guardar y enviar cookies, tal como lo hacen los navegadores.

La forma más fácil de enviar una cookie al servidor al buscar una página con curl es agregar la opción adecuada en la línea de comando:

# curl -b "nombre=Daniel" www.cookiesite.com

Las cookies se envían como encabezados HTTP normales. Esto permite que curl almacene cookies mediante el almacenamiento de encabezados. Guardar cookies con curl se hace con el comando:

# curl -D encabezados_y_cookies www.cookiesite.com

(por cierto, es mejor usar el interruptor -c para guardar cookies, más sobre eso a continuación).

curl tiene un controlador de cookies completamente funcional que es útil cuando desea conectarse al servidor nuevamente y usar las cookies que guardó la última vez (o las hechas a mano). Para usar cookies almacenadas en un archivo, llama a curl así:

# curl -b cookies_almacenadas_en_archivo www.cookiesite.com

El motor de cookies curl se habilita cuando especifica el modificador -b. Si desea que curl solo acepte cookies, use -b con un archivo que no existe. Por ejemplo, si desea que curl acepte cookies de una página y luego siga una redirección (tal vez devolviendo la cookie que acaba de aceptar), puede llamar a curl de esta manera:

# curl -b nada -L www.cookiesite.com

Curl puede leer y escribir cookies en formato Netscape y Mozilla. Esta es una forma conveniente de intercambiar cookies entre navegadores y scripts automatizados. El interruptor -b detecta automáticamente si una cookie dada es una cookie de los navegadores especificados y la maneja en consecuencia, y usando el interruptor -c/--cookie-jar puede forzar a curl a escribir una nueva cookie cuando se completa la operación:

# curl -b cookies.txt -c newcookies.txt www.cookiesite.com

11. HTTPS

Hay varias formas de asegurar sus transmisiones HTTP. El protocolo más conocido que soluciona este problema es HTTPS, o HTTP sobre SSL. SSL cifra todos los datos enviados y recibidos a través de la red, lo que aumenta la probabilidad de que su información permanezca en secreto.

Curl admite solicitudes a servidores HTTPS gracias a la biblioteca OpenSSL gratuita. Las solicitudes se realizan de la forma habitual:

# curl https://eso.secure.server.com

11.1 Certificados

En el mundo HTTPS, utiliza certificados para la autenticación además del nombre de usuario y la contraseña. Curl admite certificados en el lado del cliente. Todos los certificados están bloqueados con una frase de contraseña que debe ingresar antes de que curl pueda comenzar a trabajar con ellos. La frase de contraseña puede especificarse en la línea de comando o ingresarse de forma interactiva. Los certificados en curl se usan así:

# curl -E mycert.pem https://eso.seguro.servidor.com

Curl también autentica el servidor al verificar el certificado del servidor con uno almacenado localmente. Una falta de coincidencia dará como resultado que curl se niegue a conectarse. Para ignorar la autenticación, use el modificador -k.

Puede encontrar más información sobre los certificados en http://curl.haxx.se/docs/sslcerts.html.

12. Encabezados de solicitudes arbitrarias

Es posible que deba modificar o agregar elementos de solicitudes de curl individuales.

Por ejemplo, puede cambiar la solicitud POST a PROPFIND y enviar los datos como "Content-Type: text/xml" (en lugar del Content-Type habitual):

# rizo -d " " -H "Tipo de contenido: texto/xml" -X PROPFIND url.com

Puede eliminar cualquier encabezado especificándolo sin contenido. Por ejemplo, puede eliminar el encabezado "Host:", haciendo que la solicitud esté "vacía":

# curl -H "Host:" http://misitio.com

También puede agregar encabezados. Su servidor puede necesitar un encabezado "Destino:":

# curl -H "Destino: http://moo.com/nowhere" http://url.com

13. Depuración

A menudo sucede que un sitio responde a las solicitudes de curl de manera diferente a las solicitudes del navegador. En este caso, necesitas asimilar curl al navegador tanto como sea posible:

  • Use el interruptor --trace-ascii para guardar un informe detallado de las solicitudes para que pueda examinarlas en detalle y comprender el problema.
  • Asegúrese de verificar si hay cookies y utilícelas cuando sea necesario (leer el interruptor -b y guardar el interruptor -c)
  • Especifique uno de los últimos navegadores populares en el campo "agente de usuario"
  • Rellene el campo "referente" como lo hace el navegador
  • Si está utilizando solicitudes POST, asegúrese de que todos los campos se pasan en el mismo orden que el navegador (ver arriba, punto 4.5)

Un buen ayudante en esta difícil tarea es el complemento Mozilla/Firefox LiveHTTPHeader, que le permite ver todos los encabezados que este navegador envía y recibe (incluso cuando usa HTTPS).

Un enfoque de nivel más bajo es capturar el tráfico HTTP en la red usando programas como ethereal o tcpdump y luego analizar qué encabezados recibió y envió el navegador (HTTPS hace que este enfoque sea ineficiente).

RFC 2616 es de lectura obligatoria para cualquiera que quiera entender el protocolo HTTP.

RFC 2396 explica la sintaxis de URL.

RFC 2109 define cómo funcionan las cookies.

RFC 1867 define el formato de publicación de carga de archivos.

http://openssl.planetmirror.com - página de inicio del proyecto OpenSSL

http://curl.haxx.se - página de inicio del proyecto cURL

La biblioteca CURL (URL de cliente) le permite transferir archivos a una computadora remota utilizando muchos protocolos de Internet. Tiene una configuración muy flexible y le permite realizar casi cualquier solicitud remota.

CURL admite los protocolos HTTP, HTTPS, FTP, FTPS, DICT, TELNET, LDAP, FILE y GOPHER, así como HTTP-post, HTTP-put, cookies, cargas de FTP, reanudación de transferencias de archivos interrumpidos, contraseñas, números de puerto, certificados SSL , Kerberos y proxies.

Con CURL, un servidor web puede actuar como un cliente completo para cualquier servicio basado en HTTP, como XML-RPC, SOAP o WebDAV.

En general, el uso de la biblioteca se reduce a cuatro pasos:

  1. Creando un recurso CURL usando la función curl_init.
  2. Configuración de parámetros mediante la función curl_setopt.
  3. Ejecutar una solicitud usando la función curl_exec.
  4. Liberar el recurso CURL usando la función curl_close.

Un ejemplo simple del uso de CURL

// Inicialización de la biblioteca curl
si ($ch = @curl_init())
{
// Establecer URL de solicitud
@curl_setopt($ch, CURLOPT_URL, "http://server.com/");
// Si es verdadero, CURL incluye encabezados en la salida
@
// Donde poner el resultado de la ejecución de la consulta:
// false - al flujo de salida estándar,
// verdadero: como valor de retorno de la función curl_exec.
@
// Tiempo máximo de espera en segundos
@
// Establecer el valor del campo Usuario-agente
@curl_setopt($ch, CURLOPT_USERAGENT, "Bot de PHP (http://blog.yousoft.ru)");
// Ejecutar la solicitud
$datos = @curl_exec($ch);
// Da salida a los datos recibidos
echo $datos;
// Especializando el recurso
@curl_close($ch);
}
?>

Un ejemplo del uso de una solicitud GET

$ch = curl_init();
// La solicitud GET se especifica en la cadena de URL
curl_setopt($ch , CURLOPT_URL , "http://server.com/?s=CURL" );
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, verdadero);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 30);

$datos = curl_exec($ch);
curl_close($ch);
?>

Enviar una solicitud GET no es diferente de obtener una página. Es importante tener en cuenta que la cadena de consulta se forma de la siguiente manera:

http://server.com/index.php?name1=value1&name2=value2&name3=value3

donde http://server.com/index.php es la dirección de la página, nameX es el nombre de la variable, valueX es el valor de la variable.

Un ejemplo del uso de una solicitud POST

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "http://server.com/index.php");
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, verdadero);
// Debe indicar explícitamente que habrá una solicitud POST
curl_setopt($ch, CURLOPT_POST, verdadero);
// Los valores de las variables se pasan aquí
curl_setopt ($ch, CURLOPT_POSTFIELDS, "s=CURL");
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 30);
curl_setopt ($ch, CURLOPT_USERAGENT, "PHP Bot (http://mysite.ru)");
$datos = curl_exec($ch);
curl_close($ch);
?>

Enviar una solicitud POST no es muy diferente de enviar una solicitud GET. Todos los pasos básicos siguen siendo los mismos. Las variables también se especifican en pares: nombre1=valor1&nombre2=valor2.

Ejemplo de autorización HTTP

// autorización HTTP
$dirección URL = "http://servidor.com/protegido/";
$ch = curl_init();


curl_setopt ($ch, CURLOPT_USERPWD, "minombredeusuario:micontraseña");
$resultado = curl_exec($ch);
curl_close($ch);
echo $resultado ;
?>

Ejemplo de sesión FTP

$fp = fopen(__ARCHIVO__, "r");
$dirección URL = "ftp://nombre de usuario: [correo electrónico protegido]:21/ruta/al/nuevoarchivo.php";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_UPLOAD, 1);
curl_setopt($ch, CURLOPT_INFILE, $fp);
curl_setopt($ch, CURLOPT_FTPASCII, 1);
curl_setopt ($ch, CURLOPT_INFILESIZE, tamaño de archivo (__FILE__));
$resultado = curl_exec($ch);
curl_close($ch);
?>

Si tiene problemas para usar cURL, agregue las siguientes líneas antes de curl_close para obtener un informe de la última solicitud realizada:

print_r(curl_getinfo($ch));
echo "número de error cURL:" . curl_errno($ch). "
" ;
echo "error cURL:" . curl_error ($ch). "
" ;
curl_close($ch);
?>

La vida de un desarrollador web está plagada de dificultades. Es especialmente frustrante cuando se desconoce el origen de estas dificultades. ¿Es un problema con el envío de una solicitud, o con una respuesta, o con una biblioteca de terceros, o la API externa tiene errores? Hay muchas herramientas diferentes que pueden hacer nuestra vida más fácil. Aquí hay algunas herramientas de línea de comandos que personalmente encuentro invaluables.

rizo
cURL es un programa para transferir datos a través de varios protocolos, similar a wget. La principal diferencia es que, de manera predeterminada, wget guarda en un archivo, mientras que cURL genera la línea de comando. Esto hace que sea muy fácil ver el contenido del sitio web. Por ejemplo, aquí se explica cómo obtener rápidamente su IP externa actual:

$ curl ifconfig.me 93.96.141.93
Opciones -i(mostrar títulos) y -YO(mostrar solo encabezados) hacen de cURL una gran herramienta para depurar respuestas HTTP y analizar qué es exactamente lo que te envía el servidor:

$ curl -I habrahabr.ru HTTP/1.1 200 OK Servidor: nginx Fecha: jueves, 18 de agosto de 2011 14:15:36 GMT Tipo de contenido: text/html; charset=utf-8 Conexión: keep-alive Keep-alive: timeout=25
Parámetro -L También es útil, hace que cURL siga los redireccionamientos automáticamente. cURL admite autenticación HTTP, cookies, tunelización a través de proxies HTTP, configuración de encabezado manual y mucho, mucho más.

Cerco
Siege es una herramienta de prueba de carga. Además, tiene una opción práctica -gramo, que es muy similar a rizo -il, pero también le muestra los encabezados de solicitud http. Aquí hay un ejemplo de google.com (algunos encabezados eliminados por brevedad):

$ siege -g www.google.com GET / HTTP/1.1 Host: www.google.com User-Agent: JoeDog/1.00 (X11; I; Siege 2.70) Conexión: cerrar HTTP/1.1 302 Ubicación encontrada: http:// www.google.co.uk/ Tipo de contenido: texto/html; charset=UTF-8 Servidor: gws Longitud del contenido: 221 Conexión: cerrar GET / HTTP/1.1 Host: www.google.co.uk Agente de usuario: JoeDog/1.00 (X11; I; Siege 2.70) Conexión: cerrar HTTP/ 1.1 200 OK Tipo de contenido: texto/html; charset=ISO-8859-1 X-XSS-Protección: 1; mode=block Conexión: cerrar
Pero para lo que Siege es realmente bueno es para las pruebas de carga. Como el punto de referencia de Apache abdominales, puede enviar muchas solicitudes simultáneas al sitio y ver cómo maneja el tráfico. El siguiente ejemplo muestra cómo probamos Google con 20 solicitudes durante 30 segundos, después de lo cual se muestra el resultado:

$ siege -c20 www.google.co.uk -b -t30s... Levantando el sitio del servidor... hecho. Transacciones: 1400 hits Disponibilidad: 100,00 % Tiempo transcurrido: 29,22 segundos Datos transferidos: 13,32 MB Tiempo de respuesta: 0,41 segundos Tasa de transacción: 47,91 trans/seg Rendimiento: 0,46 MB/s Concurrencia: 19,53 Transacciones exitosas: 1400 Transacciones fallidas: 0 Transacción más larga: 4.08 Transacción más corta: 0.08
Una de las características más útiles de Siege es que puede funcionar no solo con una sola dirección, sino también con una lista de URL de un archivo. Esto es excelente para las pruebas de carga porque puede simular el tráfico real del sitio en lugar de simplemente presionar la misma URL una y otra vez. Por ejemplo, aquí se explica cómo usar Siege para cargar un servidor usando direcciones de su registro de Apache:

$ corte -d " " -f7 /var/log/apache2/access.log > urls.txt $ asedio -c -b -f urls.txt
ngrep
Para un análisis de tráfico serio, existe Wireshark con miles de ajustes, filtros y configuraciones. También hay una versión de línea de comandos. tiburón. Pero para tareas simples, considero que la funcionalidad de Wireshark es redundante. Entonces, siempre que no necesite un arma poderosa, uso . Le permite hacer lo mismo con paquetes de red como grep hace con los archivos.

Para el tráfico web, casi siempre querrá usar el -W para conservar el formato de cadena, así como la opción -q, que oculta información redundante sobre paquetes inapropiados. Aquí hay un ejemplo de un comando que intercepta todos los paquetes con un comando GET o POST:

ngrep -q -W línea de autor "^(GET|POST) .*"
Puede agregar un filtro adicional para paquetes, por ejemplo, por un host, una dirección IP o un puerto determinados. Aquí hay un filtro para todo el tráfico entrante y saliente en google.com, puerto 80, que contiene la palabra "buscar".

ngrep -q -W byline "buscar" host www.google.com y puerto 80

21 respuestas

Puede que ya tengas un rizo

Es posible que no necesite descargar nada:

  • Si está ejecutando Windows 10 versión 1803 o superior, su sistema operativo viene con una copia de curl ya configurada y lista para usar.
  • Si tiene necesidades más esotéricas (por ejemplo, necesita compilaciones de cygwin, compilaciones de terceros, libcurl, archivos de encabezado, códigos fuente, etc.), use el asistente de descarga de curl. Después de responder cinco preguntas, se le presentará una lista de enlaces de descarga.

    Extracción y ajuste de rizo

    Encuentre curl.exe en su paquete descargado; probablemente esté debajo de bin\ .

    Seleccione una ubicación en su disco duro que sirva como hogar permanente para los rizos:

    • Si desea hacer que curl sea su propia carpeta, C:\Program Files\curl\ o C:\curl\ servirá.
    • Si tiene muchos ejecutables gratuitos y no desea agregar muchas carpetas individuales a PATH , use una sola carpeta para este fin, como C:\Program Files\tools\ o C:\tools\ .

    Coloque curl.exe en una carpeta. Y nunca mueva una carpeta o su contenido.

    A continuación, querrá que curl esté disponible en cualquier lugar de la línea de comandos. Para hacer esto, agregue la carpeta a PATH, así:

    1. Haz clic en el menú de inicio de Windows 10. Comienza a escribir "entorno".
    2. Verás el resultado de la búsqueda. Editar variables de entorno del sistema. Elígelo.
    3. Se abre la ventana Propiedades del sistema. Haga clic en el botón Variables de entorno abajo.
    4. Seleccione la variable "Ruta" en la sección "Variables del sistema" (cuadro inferior). Haga clic en el botón Cambio.
    5. Haga clic en " Agregar" y pegue la ruta a la carpeta donde se encuentra curl.exe.
    6. Hacer clic DE ACUERDO, si es necesario Cierre las ventanas abiertas de la consola y vuelva a abrirlas para que obtengan la nueva RUTA.

    Ahora disfrute escribiendo curl en cualquier línea de comando. ¡Tiempo de divertirse!

    Para ejecutar curl desde la línea de comando

    a) Haga clic derecho en el icono "Mi PC"

    b) Seleccione "Propiedades"

    d) Haga clic en la pestaña [Avanzado] - botón "Variables de entorno"

    e) En "Variable del sistema", seleccione "Ruta" y "Editar"

    f) Agregue un punto y coma y luego la ruta donde colocó su curl.exe (por ejemplo, D:\software\curl)

Ahora puede ejecutar desde la línea de comando escribiendo:

Rizo www.google.com

A partir de Windows 10 versión 1803 (y versiones anteriores con Insider Build 17063), ya no instala curl. Windows contiene su propio curl.exe (y tar.exe) en C:\Windows\System32\ , al que puede acceder directamente desde CMD normal.

C:\Users\vonc>C:\Windows\System32\curl.exe --version curl 7.55.1 (Windows) libcurl/7.55.1 WinSSL Fecha de lanzamiento: Protocolos: archivo dict ftp ftps http https imap imaps pop3 pop3s smtp smtps telnet tftp Características: AsynchDNS IPv6 Largefile SSPI Kerberos SPNEGO NTLM SSL C:\Users\vonc>C:\Windows\System32\tar.exe --version bsdtar 3.3.2 - libarchive 3.3.2 zlib/1.2.5.f- ipp

Probablemente valga la pena señalar que Powershell v3 y versiones posteriores contienen el cmdlet Invoke-WebRequest, que tiene algunas capacidades de curling. Probablemente valga la pena mencionar los cmdlets New-WebServiceProxy e Invoke-RestMethod.

No estoy seguro de si te funcionarán o no, pero aunque no estoy en Windows, debo decir que encuentro el enfoque de objetos que usa PS, es mucho más fácil trabajar con utilidades como curl, wget, etc. . Podrían valer la pena echarle un vistazo

Puede compilar la última versión de curl, openssl, libssh2 y zlib en 3 sencillos pasos siguiendo este tutorial.

Curl está construido estáticamente para que no tengas que distribuir el tiempo de ejecución dinámico necesario.

También puede descargar una versión preconstruida (x86 y x64) desde

estaba buscando el proceso de descarga rizo y cada uno donde dijeron copiar el archivo curl.exe en System32 pero no proporcionaron un enlace directo. así que aquí puedes disfrutar curl.exe fácil en carpeta bin simplemente

descomprímalo y luego vaya a la carpeta bin donde obtiene el archivo exe

Pensé en escribir exactamente lo que hice (Windows 10, versión de 64 bits):

Seleccione el ejecutable curl.

Seleccione Win64.

Elige universales.

Elige cualquiera.

versión curl: 7.53.1 - SSL habilitado SSH habilitado. Crédito: Viktor Shakats. Este paquete es del tipo ejecutable curl. Este enlace le proporcionará un binario curl precompilado (o, en algunos casos, utilizando la información proporcionada en la página a la que le lleva este enlace). Puede o no instalar libcurl como una biblioteca/DLL compartida. El archivo se empaqueta con 7zip. 7zip es un formato de compresión de archivos.

Haga clic en descargar.

Debe tener el archivo curl-7.53.1-win64-mingw.7z en su carpeta de descargas.

Instale 7-Zip si no lo tiene.

Haga clic derecho, 7-Zip, Extraer aquí. Copie y pegue el archivo extraído en algún lugar como Z:\Tools\

Si busca en la carpeta bin, verá curl.exe. Si hace doble clic en él, la ventana parpadeará rápidamente y desaparecerá. Para ejecutarlo, debe usar la línea de comando. Vaya a la carpeta bin y escriba curl seguido de sus opciones para realizar la solicitud. Debes usar comillas dobles. Las comillas simples no funcionarán con curl en Windows.

Ahora necesita agregar curl a su ruta de usuario para que no tenga que navegar a la carpeta correcta para ejecutar el programa. Vaya a "Esta PC", "Computadora", "Propiedades del sistema", "Configuración avanzada del sistema", inicie sesión como administrador (no es administrador, ¿verdad? ¿Verdad?). Variables de entorno, Variables del sistema, mire la lista y seleccione Ruta, luego Editar, luego Nuevo, luego, por ejemplo,

z:\herramientas\curl-7.53.1-win64-mingw\bin

Puede agregar una barra invertida si lo desea, no creo que importe. Presione el botón de subir hasta que esté en la parte superior de la lista y pueda verlo fácilmente desde la pantalla anterior. Presione OK, OK, OK, luego abra un símbolo del sistema y puede ejecutar curl escribiendo curl desde cualquier carpeta como cualquier usuario. No olvides tus comillas dobles.

Esta es la respuesta que me gustaría recibir.

Este instalador me lo facilitó http://www.confusedbycode.com/curl/

"Puede instalar cURL para Windows con solo unos pocos clics. Simplemente descargue y ejecute el instalador de la tabla a continuación y haga clic en Instalar. La instalación predeterminada incluye.

16 de febrero de 2006Jeff Felling

Curl lo ayuda a administrar los datos publicados en la Web. Este artículo analiza la herramienta gratuita Curl, que le permite enviar y recibir páginas Web desde la línea de comandos. Gracias a Curl, es fácil automatizar muchos

Curl te ayudará a administrar los datos publicados en la Web

Este artículo trata sobre la herramienta gratuita Curl, que le permite enviar y recibir páginas web desde la línea de comandos. Curl facilita la automatización de muchas tareas de seguridad y administración, como la extracción de una página web para su análisis o la descarga de un parche de seguridad de la web.

Instalación de rizos

Curl se incluye con muchas distribuciones de Unix. Los binarios y las fuentes están disponibles para la mayoría de los demás sistemas operativos. Incluso los programadores PHP de código abierto pueden usar Curl para acceder de forma segura al contenido web directamente desde scripts PHP.

Curl requiere el paquete OpenSSL para trabajar con sitios web de capa de sockets seguros (SSL). Hay dos versiones de Curl, una con SSL y otra sin SSL. Recomiendo el primero, porque SSL protege los datos de forma segura.

Antes de poder usar Curl con la funcionalidad SSL, debe descargar e instalar por separado el paquete OpenSSL desde la web. Los archivos binarios de OpenSSL para Windows se pueden descargar desde el sitio del proyecto GnuWin32 SourceForge en . Este sitio también tiene muchas otras herramientas útiles adaptadas a Windows.

Descargue e instale el paquete OpenSSL, luego copie los dos archivos DLL en el directorio system32:

Copie "C:Archivos de programaGnuWin32 binlibeay32.dll" %windir%system32 copie "C:Archivos de programaGnuWin32 binlibssl32.dll" %windir%system32

Después de eso, puedes instalar Curl. Los archivos binarios de Curl compatibles con SSL para Windows se pueden encontrar en http://curl.haxx.se/latest.cgi?curl=win32-ssl-sspi. La versión más reciente, curl 7.15.0, está en win32-ssl-sspi.zip, que contiene el archivo curl.exe y la documentación.

Después de instalar Curl, debe asegurarse de que funcione escribiendo el comando

Rizo http://isc.sans.org/infocon.txt

Si aparece una palabra que representa un color en la pantalla (por ejemplo, verde), entonces Curl está funcionando. En este sencillo ejemplo, Curl recupera el contenido de Infocon del sitio web Internet Storm Center del SANS Institute. Verde significa que Internet funciona con normalidad y no se han detectado amenazas graves. Si, en lugar de verde, aparecen las palabras amarillo, naranja o rojo en la pantalla, deje este artículo a un lado y visite el sitio. http://isc.sans.org para aprender sobre estados de alto riesgo en Internet. En caso de error, debe verificar que Curl esté instalado correctamente.

Esencialmente, Curl recupera una página web y luego imprime la fuente HTML de la página en la consola. Sin embargo, las posibilidades de la utilidad son más amplias. Curl tiene una verificación de errores incorporada. Por ejemplo, el comando

Curl http://noserveraquí

da error Curl: (6) No se pudo resolver host: noserverhere; Host no encontrado. Los códigos de error se pueden usar en secuencias de comandos para probar la disponibilidad de una página web o la respuesta de un servidor web. Por ejemplo, si usa Curl para recuperar una página web diariamente, específicamente las estadísticas diarias de un sitio web, puede agregar código fuente a su secuencia de comandos que busque códigos de error. Si Curl da el código de error Curl: (7) no se pudo conectar al host, puede enviar una alerta inmediatamente o enviar un correo electrónico.

Extraer datos cifrados

Una de las ventajas más importantes de Curl es su compatibilidad con SSL. Las páginas HTTPS solicitadas se envían cifradas a través de la red y luego Curl muestra el texto recuperado en la pantalla. Además, Curl verifica los certificados (la fecha de vencimiento del certificado, el nombre de host coincide con el nombre de host en el certificado y el nivel de confianza en el certificado raíz) y advierte si el certificado no es válido. La opción -cacert le permite especificar un archivo de certificado específico. La verificación de certificados se deshabilita con la opción -k. Un enfoque alternativo es usar la opción -insecure.

No solo para WWW

Curl es más que simplemente enviar archivos a través de Internet. Con Curl, puede enumerar rápidamente los directorios de un sitio FTP:

Curl ftp://misitioftp

Para ver los subdirectorios del sitio, debe ingresar el comando

Curl ftp://myftpsite/subdir/

Para descargar un archivo de la red, simplemente especifique el nombre del archivo en la URL. En el siguiente ejemplo, un archivo llamado readme.txt se carga directamente desde la línea de comando y se muestra en la pantalla:

Curl ftp://ftp.microsoft.com/deskapps/games/readme.txt

A menudo, es más fácil crear secuencias de comandos con Curl para ingresar archivos FTP que usar el comando FTP de forma interactiva.

De manera predeterminada, la salida se escribe directamente en la consola, pero se puede redirigir a un archivo usando las opciones -o y -O. Para obtener la página y guardarla en el disco, use la opción -o. La opción -O guarda la página resultante en un archivo local y Curl recupera el nombre del documento remoto. Si no se especifica ningún nombre de archivo en la URL, esta operación fallará. Si usa Curl para enviar una consulta a un sitio web sin un nombre de archivo, pero desea guardar el resultado en un archivo, puede especificar el nombre de archivo en la línea de comando, así:

Autenticación

Curl proporciona métodos de autenticación básicos, resumidos e integrados. En la mayoría de los sitios, se puede acceder a las páginas de autenticación basadas en formularios utilizando las funciones de envío de Curl, como se demostrará en breve. Esto significa que puede enviar datos de formulario, como un nombre de usuario y una contraseña, a un sitio web remoto que le solicite información en una página web. Puede usar la opción -u para enviar las credenciales, o puede incrustarlas en la URL, lo que tradicionalmente se hace en FTP, así:

Curl ftp://nombre de usuario: [correo electrónico protegido]

Usando Curl, las técnicas prestadas de FTP se pueden transferir a HTTP, como en el siguiente ejemplo:

Curl http://nombre de usuario:contraseña @myhtmlsite/default.htm

Curl también proporciona acceso a páginas web a través de un servidor proxy. Por lo tanto, Curl se puede configurar para usar un servidor proxy para la autenticación básica, implícita y NTLM.

Leer documentación

Es difícil cubrir todas las funciones de Curl en un artículo, incluida la carga de archivos en el servidor (-T), la visualización solo de la información en el encabezado HTTP (-I), la visualización de todos los datos en modo detallado (-V) y la visualización oculta. salida (-s). Recomiendo echar un vistazo más de cerca a las funciones Curl en el tutorial publicado en http://curl.haxx.se/docs .

Ejemplo de rizo

Ahora que está familiarizado con los conceptos básicos de Curl, veamos un ejemplo simple de extracción de datos de un sitio web dados los datos de entrada. Construyamos una herramienta Whois simple que demuestre la facilidad y conveniencia de usar Curl y cómo enviar datos a un sitio web usando la opción -d. En este ejemplo, Curl envía la dirección IP al sitio web Arin Whois y luego recupera los resultados de ese sitio. Whois busca información sobre el propietario de una dirección IP.

Es importante investigar un sitio web antes de comenzar, porque el código fuente de cada sitio es diferente y Curl no siempre funciona de la misma manera para todos los sitios. Una visita preliminar al sitio le permite recopilar la información necesaria para que Curl funcione. En este ejemplo, utilicé el navegador para visitar el sitio web http://www.arin.net/whois/, y notó que el sitio tiene un solo campo de entrada de datos en el que los visitantes indican la dirección IP que les interesa. Debe obtener los detalles de este campo, que forma parte del formulario web. Este ejemplo utiliza el script de Perl formfind.pl ( http://cool.haxx.se/cvs.cgi/curl/perl/contrib/formfind?rev=HEAD&content-type=text/vnd.viewcvs-markup). El script Formfind.pl convierte los datos del formulario en salidas utilizables y facilita la búsqueda manual de datos en HTML. Por supuesto, Perl debe implementarse en la computadora para ejecutar Formfind. Se puede solicitar un buen paquete Win32 Perl desde el sitio de ActiveState ActivePerl en http://www.estadoactivo.com .

Consideremos un ejemplo con más detalle. Primero, veamos un sitio web que contiene un formulario que solicita información:

Curl -o archivo de salida whois http://www.arin.net/whois/

Este comando recupera la página Whois de http://www.arin.net y la almacena en un archivo de texto whoisOutputFile, que contiene la fuente HTML que reproduce el navegador cuando se visita el sitio.

Luego debe buscar y resaltar los datos del formulario:

./formfind.pl

Formfind devuelve variables de formulario y sus posibles valores. En este ejemplo, los resultados de salida son bastante simples (ver más abajo). pantalla 1).

Observe la entrada de datos del formulario llamada queryinput. Este es un campo de texto donde Curl debe enviar la dirección IP para buscar. La dirección IP específica no importa; en este ejemplo, se utilizó la dirección de Microsoft. Con la opción -d, la dirección IP buscada se envía al campo de entrada de consulta:

Curl -d "consulta entrada=207.46.133.140" http://ws.arin.net/cgibin/whois.pl

El comando Curl con la opción -d busca los datos en el formulario, en este caso queryinput, que es la dirección IP para buscar. Esto cambia la dirección de destino; el formulario debe enviar datos a una nueva URL que represente el script whois.pl. La nueva dirección de destino se puede ver en la salida de búsqueda de formulario en la Pantalla 1.

En este ejemplo, también se obtiene el texto fuente HTML de la respuesta de Whois, pero está oculto por un grupo de etiquetas HTML. De forma predeterminada, el mensaje de estado Curl muestra el tamaño del documento, el porcentaje completado y la tasa de transferencia. Puede limpiar un poco la salida y filtrar el nombre de la organización propietaria de la dirección IP. Curl status se puede deshabilitar usando la opción -s. El comando debe ejecutarse a través de grep para obtener solo el OrgName:

Curl -s -d "queryinput=207.46.133.140" http://ws.arin.net/cgibin/ whois.pl | grep nombre de organización

En este ejemplo, el resultado muestra que OrgName es Microsoft Corp.

@echo off curl -k -s -d "queryinput= %1" http://ws.arin.net/cgibin/ whois.pl | grep nombre de organización



Si nota un error, seleccione un fragmento de texto y presione Ctrl + Enter
CUOTA: