El protocolo de transferencia de hipertexto (HTTP) es un protocolo sin estado que sigue el modelo cliente-servidor, en el que un cliente realiza una solicitud y luego espera una respuesta del servidor. La solicitud incluye detalles como el método HTTP, la ubicación del servidor, la ruta, la cadena de consulta y los encabezados.
Los encabezados HTTP son campos o listas de cadenas en forma de pares clave-valor que facilitan la transmisión de metadatos e instrucciones. Son fundamentales para definir parámetros como el tipo de contenido, el comportamiento del almacenamiento en caché y la autenticación, lo que garantiza interacciones eficientes y seguras entre clientes y servidores. En el Scraping web, los encabezados HTTP permiten personalizar las solicitudes, lo que permite a los Scrapers imitar a los agentes de usuario, controlar la negociación de contenidos y gestionar la autenticación según las políticas y protocolos de cada sitio web.
Algunos casos de uso comunes de los encabezados HTTP en el scraping web incluyen cambiar el agente de usuario (UA) o el tipo de respuesta, realizar solicitudes condicionales y autenticarse en las interfaces de programación de aplicaciones (API).
En este artículo, aprenderá a enviar encabezados HTTP concurl.
Envío de encabezados HTTP con cURL
Antes de comenzar este tutorial, compruebe que curl está instalado en su sistema operativo ejecutando el siguiente comando en su terminal:
curl --version
Si está instalado, verá un número de versión en la salida, como este:
curl 7.55.1 (Windows) libcurl/7.55.1 WinSSL
Fecha de lanzamiento: [sin publicar]
Protocolos: dict file ftp ftps http https imap imaps pop3 pop3s smtp smtps telnet tftp
Características: AsynchDNS IPv6 Largefile SSPI Kerberos SPNEGO NTLM SSL
Si aparece un mensaje de error, como«curl no se reconoce como comando interno o externo, programa operativo o archivo por lotes» o«comando no encontrado», deberáinstalar curl.
También necesitará una herramienta para inspeccionar los encabezados, comohttpbin.org, que es un sencillo servicio de solicitudes y respuestas HTTP.
Si ya ha trabajado con curl anteriormente, sabrá que la sintaxis de curl es la siguiente:
curl [opciones] [url]
Esto significa que si desea descargar una página web de mywebpage.com, deberá ejecutar el siguiente comando:
curl www.mywebpage.com
Encabezados cURL
Para ver los encabezados enviados por curl utilizando httpbin.org, abre la línea de comandos y ejecuta lo siguiente:
curl http://httpbin.org/headers
El resultado debería incluir una lista de los encabezados:
{
"headers": {
"Accept": "*/*",
"Host": "httpbin.org",
"User-Agent": "curl/7.55.1",
"X-Amzn-Trace-Id": "Root=1-65fd2eb0-0617353714d52f3777c9c267"
}
Los encabezados Accept, Host y User-Agent se envían de forma predeterminada con curl.
El encabezado Accept le indica al servidor qué tipos de medios puede aceptar el cliente. Le comunica al servidor los tipos de contenido que el cliente está dispuesto a aceptar, lo que permite la negociación de contenido entre el cliente y el servidor.
Un encabezado Accept que muestra que el cliente prefiere JSON tiene este aspecto:
Accept: application/json
El campo User-Agent contiene los detalles de su cliente, que, en este caso, es la aplicación curl que ejecuta la versión 7.55.1 (este número de versión coincidirá con su versión).
El encabezado Host identifica de forma única el dominio web (es decir, el host) y el puerto al que se envía la solicitud HTTP. Si no se incluye un puerto en la solicitud, se asumen los valores predeterminados (es decir, el puerto 80 para HTTP y el puerto 443 para HTTPS).
X-Amzn-Trace-Id es el único encabezado de la salida que no es un encabezado predeterminado. Este encabezado muestra que su solicitud se envió a un servicio de Amazon Web Services (AWS), como un equilibrador de carga de AWS, y se puede utilizar para rastrear solicitudes HTTP.
Para verificar que estos encabezados fueron enviados por curl de forma predeterminada, puede utilizar el modo detallado. El indicador para ello es -v o --verbose y muestra información detallada sobre la solicitud y la respuesta, incluidos los encabezados.
Ejecute el siguiente comando para ver los encabezados predeterminados enviados por curl:
curl -v http://httpbin.org/headers
El resultado debería ser similar al siguiente:
* Intentando 50.16.63.240...
* TCP_NODELAY establecido
* Conectado a httpbin.org (50.16.63.240) puerto 80 (#0)
> GET /headers HTTP/1.1
> Host: httpbin.org
> User-Agent: curl/7.55.1
> Aceptar: */*
>
< HTTP/1.1 200 OK
< Fecha: viernes, 22 de marzo de 2024, 07:18:00 GMT
< Tipo de contenido: application/json
< Longitud del contenido: 173
< Conexión: keep-alive
< Servidor: gunicorn/19.9.0
< Access-Control-Allow-Origin: *
< Access-Control-Allow-Credentials: true
<
{
"headers": {
"Accept": "*/*",
"Host": "httpbin.org",
"User-Agent": "curl/7.55.1",
"X-Amzn-Trace-Id": "Root=1-65fd30a8-624365ad52781957578cd5b1"
}
}
* Conexión n.º 0 al host httpbin.org intacta
Las líneas con un signo mayor que (>) muestran lo que su cliente (curl) envió al punto final. Esta salida confirma que se enviaron los siguientes encabezados:
GET(método HTTP) al punto final/encabezadosHostcon el valorhttpbin.orgUser-Agentcon el valorcurl/7.55.1Acceptcon el valor*/*
En el resultado, las líneas con un signo menor que, como < Content-Type: application/json, son reflejos de los encabezados que enviaste.
Cambiar los encabezados predeterminados utilizando el indicador -H
El indicador -H o --header se utiliza para pasar encabezados personalizados al servidor y también se puede utilizar para realizar pruebas.
Por ejemplo, para cambiar el User-Agent de curl/7.55.1 a Your-New-User-Agent, utilice el siguiente comando:
curl -H "User-Agent: Your-New-User-Agent" http://httpbin.org/headers
El resultado será similar a este:
{
"headers": {
"Accept": "*/*",
"Host": "httpbin.org",
"User-Agent": "Your-New-User-Agent",
"X-Amzn-Trace-Id": "Root=1-65fd5123-3ebe566a4681427c6996c72c"
}
}
Si desea cambiar el encabezado Accept de */*, que acepta cualquier tipo de contenido, a application/json, que solo acepta contenido en formato JSON, utilice el siguiente comando:
curl --header "Accept: application/json" http://httpbin.org/headers
El resultado será similar a este:
{
"headers": {
"Accept": "application/json",
"Host": "httpbin.org",
"User-Agent": "curl/7.55.1",
"X-Amzn-Trace-Id": "Root=1-65fd55c3-05c21f81770c1c5e6343b1fc"
}
}
Nota: En el segundo ejemplo, se utilizó
--headeren lugar de-H.--headery-Hson intercambiables y realizan la misma función.
Desde la versión 7.55.0 de curl, también se puede pasar un archivo con los encabezados. Por ejemplo, si el nombre del archivo con los encabezados es header_file, se puede utilizar el siguiente comando para pasar un archivo con los encabezados:
Curl -H @header_file
Enviar encabezados personalizados
Los encabezados personalizados son definidos por los desarrolladores e incluyen información adicional sobre las solicitudes HTTP más allá de la que proporcionan los encabezados estándar.
Para enviar un encabezado personalizado con curl, puede utilizar el indicador -H. Por ejemplo, si desea enviar un encabezado personalizado llamado My-Custom-Header con el valor value del encabezado personalizado, ejecute el siguiente comando:
curl -H "My-Custom-Header: Value of custom header" http://httpbin.org/headers
El resultado será similar al siguiente:
{
"headers": {
"Accept": "*/*",
"Host": "httpbin.org",
"My-Custom-Header": "Value of custom header",
"User-Agent": "curl/7.55.1",
"X-Amzn-Trace-Id": "Root=1-65fd7d2a-3b683be160ff2965023b3a31"
}
}
Enviar encabezados vacíos
Hay situaciones en las que es necesario enviar encabezados vacíos, como por ejemplo para cumplir con requisitos específicos de API que exigen determinados encabezados aunque no tengan ningún contenido. Por ejemplo, elencabezado HTTP Strict Transport Security (HSTS)se utiliza para aplicar conexiones HTTPS seguras en sitios web. Aunque este encabezado suele incluir directivas sobre la duración y el comportamiento de HSTS, enviarlo con un valor vacío garantiza la aplicación inmediata de HSTS.
También puede utilizar encabezados vacíos para borrar o restablecer encabezados. Por ejemplo, si desea restablecer o borrar un encabezado que se estableció previamente de forma predeterminada, el envío de un encabezado vacío puede borrar el valor del encabezado.
Para enviar un encabezado vacío con curl, debe especificar el nombre del encabezado seguido de un punto y coma para indicar un valor vacío. El siguiente comando muestra cómo se puede enviar un encabezado personalizado vacío llamado My-Custom-Header:
curl -H "My-Custom-Header;" http://httpbin.org/headers
El resultado muestra My-Custom-Header con un valor vacío:
{
"headers": {
"Accept": "*/*",
"Host": "httpbin.org",
"My-Custom-Header": "",
"User-Agent": "curl/7.55.1",
"X-Amzn-Trace-Id": "Root=1-65fd84e2-7a42d9d62a42741e448c426f"
}
}
Eliminar un encabezado
Para eliminar un encabezado con curl, debe especificar el nombre del encabezado seguido de dos puntos sin ningún valor.
Por ejemplo, para eliminar el encabezado User-Agent predeterminado, envíe el siguiente comando:
curl -H "User-Agent:" http://httpbin.org/headers
La respuesta no contiene el encabezado User-Agent, lo que verifica que se ha eliminado:
{
"headers": {
"Accept": "*/*",
"Host": "httpbin.org",
"X-Amzn-Trace-Id": "Root=1-65fd862d-13b181583501ae11046374a1"
}
}
Enviar varios encabezados
Hasta ahora, ha visto ejemplos que incluyen solo un encabezado, pero es posible enviar más de un encabezado con curl. Todo lo que necesita hacer es incluir la bandera -H varias veces.
Por ejemplo, si quieres enviar dos encabezados (Custom-Header-1 y Custom-Header-2) con los valores uno y dos, respectivamente, ejecuta el siguiente comando:
curl -H "Custom-Header-1: one" -H "Custom-Header-2: two" http://httpbin.org/headers
El resultado será similar a este:
{
"headers": {
"Accept": "*/*",
"Custom-Header-1": "one",
"Custom-Header-2": "two",
"Host": "httpbin.org",
"User-Agent": "curl/7.55.1",
"X-Amzn-Trace-Id": "Root=1-65fd8781-143be3502c559bc5605fc6f1"
}
}
Conclusión
En este artículo, has aprendido qué son los encabezados HTTP y cómo enviarlos con curl.
Si busca una solución integral para el Scraping web, pruebeBright Data. Ofrece herramientas y servicios comoservicios de Proxy, que ayudan a garantizar el anonimato y a evitar el bloqueo de IP, yWeb Unlocker, que le ayuda a acceder a contenidos restringidos geográficamente sin CAPTCHAs.
¡Comience su prueba gratuita hoy mismo!