systemadmin.es > Utilidades > Especificar que Host header debe usar el curl

Especificar que Host header debe usar el curl

Anteriormente ya hemos visto que mediante wget podemos indicar un determinado Host header, hoy vamos a ver como hacer lo mismo con curl.

Con el protocolo HTTP/1.1, en un mismo servidor web con una única IP se puede alojar más de un site web. Esto se consigue gracias a que el cliente manda un header adicional llamado Host en el cual indica el nombre del dominio al que pretende acceder:

$ curl -vI systemadmin.es 
* About to connect() to systemadmin.es port 80
*   Trying 11.121.121.11... connected
* Connected to systemadmin.es (11.121.121.11) port 80
> HEAD / HTTP/1.1
> User-Agent: curl/7.15.5 (x86_64-redhat-linux-gnu) libcurl/7.15.5 OpenSSL/0.9.8b zlib/1.2.3 libidn/0.6.5
> Host: systemadmin.es
> Accept: */*
> 
< HTTP/1.1 200 OK
HTTP/1.1 200 OK
< Server: nginx
Server: nginx
< Date: Thu, 19 Aug 2010 07:13:41 GMT
Date: Thu, 19 Aug 2010 07:13:41 GMT
< Content-Type: text/html; charset=UTF-8
Content-Type: text/html; charset=UTF-8
< Connection: keep-alive
Connection: keep-alive
< X-Pingback: http://systemadmin.es/xmlrpc.php
X-Pingback: http://systemadmin.es/xmlrpc.php
< Vary: Accept-Encoding
Vary: Accept-Encoding

* Connection #0 to host systemadmin.es left intact
* Closing connection #0

Mediante la opción -H de curl pododemos añadir headers:

$ curl -vI systemadmin.es -H 'X-lol: xDD' 2>&1 | grep "^>"
> HEAD / HTTP/1.1
> User-Agent: curl/7.15.5 (x86_64-redhat-linux-gnu) libcurl/7.15.5 OpenSSL/0.9.8b zlib/1.2.3 libidn/0.6.5
> Host: systemadmin.es
> Accept: */*
> X-lol: xDD
> 

En el caso que indiquemos un header que ya existe como el Host lo sobreescribe, por ejemplo:

$ curl -vI systemadmin.es -H 'Host: www.facebook.com' >/dev/null    
* About to connect() to systemadmin.es port 80
*   Trying 11.121.121.11... connected
* Connected to systemadmin.es (11.121.121.11) port 80
> HEAD / HTTP/1.1
> User-Agent: curl/7.15.5 (x86_64-redhat-linux-gnu) libcurl/7.15.5 OpenSSL/0.9.8b zlib/1.2.3 libidn/0.6.5
> Accept: */*
> Host: www.facebook.com
> 
< HTTP/1.1 404 Not Found
< Server: nginx
< Date: Thu, 19 Aug 2010 07:20:04 GMT
< Content-Type: text/html
< Connection: keep-alive
< Last-Modified: Tue, 27 Jul 2010 12:23:26 GMT
< ETag: "830005-99ba-48c5d9164eb80"
< Accept-Ranges: bytes
< Content-Length: 39354
< Vary: Accept-Encoding
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0 39354    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0* Connection #0 to host systemadmin.es left intact

* Closing connection #0

Especificando este header podemos hacer queries a un determinado VirtualHost sin que la IP que resuelve el dominio sea al host que indicamos. En este caso hemos hecho una petición al servidor de systemadmin.es pero indicando que queremos acceder al VirtualHost llamado www.facebook.com. Evidentemente en este caso devuelve un 404 (Not Found)

Deja un comentario:

XHTML - Tags permitidos:<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>