Intento descargar un archivo con wget
y curl
y es rechazado con un error 403 (prohibido).
Puedo ver el archivo usando el navegador web en la misma máquina.
Lo intento de nuevo con el agente de usuario de mi navegador, obtenido por http://www.whatsmyuseragent.com. Hago esto:
wget -U 'Mozilla/5.0 (X11; Linux x86_64; rv:30.0) Gecko/20100101 Firefox/30.0' http://...
y
curl -A 'Mozilla/5.0 (X11; Linux x86_64; rv:30.0) Gecko/20100101 Firefox/30.0' http://...
pero sigue estando prohibido. Qué otras razones puede haber para el 403, y qué maneras puedo alterar los comandos wget
y curl
para superarlas?
(no se trata de poder obtener el archivo - sé que puedo guardarlo desde mi navegador; se trata de entender por qué las herramientas de línea de comandos funcionan de manera diferente)
actualización
Gracias a todas las excelentes respuestas dadas a esta pregunta. El problema específico que había encontrado era que el servidor estaba comprobando el referrer. Añadiendo esto a la línea de comandos pude obtener el archivo usando curl
y wget
.
El servidor que comprobaba el referrer rebotó a través de un 302 a otra ubicación que no realizaba ninguna comprobación, por lo que un curl
o wget
de ese sitio funcionó limpiamente.
Si alguien está interesado, esto surgió porque estaba leyendo esta página para aprender sobre CSS incrustado y estaba tratando de mirar el css del sitio's para un ejemplo. La URL real con la que estaba teniendo problemas era esto y el curl
con el que terminé es
curl -L -H 'Referer: http://css-tricks.com/forums/topic/font-face-in-base64-is-cross-browser-compatible/' http://cloud.typography.com/610186/691184/css/fonts.css
y el wget es
wget --referer='http://css-tricks.com/forums/topic/font-face-in-base64-is-cross-browser-compatible/' http://cloud.typography.com/610186/691184/css/fonts.css
Muy interesante.
Una petición HTTP puede contener más cabeceras que no son establecidas por curl o wget. Por ejemplo:
key=val
, puedes establecerla con la opción -b key=val
(o --cookie key=val
) para curl
.curl
para esto es -e URL
y --referer URL
.curl
con la opción -u user:password
(o --user user:password
).Mozilla
, o que contengan Wget
o curl
).Normalmente puedes utilizar las herramientas de desarrollo de tu navegador (Firefox y Chrome lo soportan) para leer las cabeceras enviadas por tu navegador. Si la conexión no está encriptada (es decir, no utiliza HTTPS), también puedes utilizar un rastreador de paquetes como Wireshark para este propósito.
Además de estas cabeceras, los sitios web también pueden desencadenar algunas acciones entre bastidores que cambian el estado. Por ejemplo, al abrir una página, es posible que se realice una petición en segundo plano para preparar el enlace de descarga. O que se produzca una redirección en la página. Estas acciones suelen hacer uso de Javascript, pero también puede haber un marco oculto que facilite estas acciones.
Si está buscando un método para obtener fácilmente archivos de un sitio de descarga, eche un vistazo a plowdown, incluido en plowshare.
Sólo quiero añadir a las respuestas anteriores que usted podría utilizar el "Copiar como cURL" característica presente en las herramientas de desarrollo de Chrome (desde v26.0) y Firebug (desde v1.12). Puedes acceder a esta función haciendo clic con el botón derecho del ratón en la fila de peticiones de la pestaña Red.
Dependiendo de lo que pidas, podría ser una cookie. Con Firefox, usted puede hacer un clic derecho cuando usted ' re en la página en cuestión, "Ver información de la página". Elija "Seguridad" icono, y luego haga clic en "Ver cookies" botón.
Para descifrar las cookies, el complemento de Firefox "Live HTTP Headers" es esencial. Puedes ver qué cookies se instalan y qué cookies se devuelven al servidor web.
wget
puede funcionar con las cookies, pero es totalmente exasperante, ya que no da ninguna pista de que no ha enviado cookies. Su mejor apuesta es eliminar todas las cookies relacionadas de su navegador, y pasar por cualquier inicio de sesión o la secuencia de visualización de la página que toma. Mire en "Live HTTP Headers" para las cookies, y para cualquier parámetro POST o GET. Haga el primer paso de inicio de sesión con wget
usando las opciones "--keep-session-cookies" y "--save-cookies". Eso le dará un archivo de cookies que puede mirar con un editor de texto. Utilice wget --load-cookies
con el archivo cookie para los siguientes pasos.