¿Cómo uso wget / curl para descargar desde un sitio en el que estoy conectado?

46

Algunas partes de wikipedia aparecen de manera diferente cuando inicias sesión. Me gustaría activar las páginas de usuario para que aparezcan como si hubiera iniciado sesión.

¿Hay alguna manera de que pueda recordar páginas de usuario como esta?

http://en.wikipedia.org/wiki/User:A

esta es la página de inicio de sesión:

http://en.wikipedia.org/w/index.php?title=Special:UserLogin&returnto=Login&campaign=ACP3
usuario784637
fuente
Consulte stackoverflow.com/a/21919431/1136018 para obtener una solución fácil con Google Chrome + cURL
pterojacktyl

Respuestas:

50

La manera fácil: inicie sesión con su navegador y dele las cookies a wget

Método más fácil: en general, debe proporcionar wget o curl con las cookies (iniciadas) de un sitio web en particular para que puedan buscar páginas como si hubiera iniciado sesión .

Si está utilizando Firefox, es fácil hacerlo a través del complemento Exportar cookies . Instale el complemento y:

  1. Vaya a Herramientas ... Exportar cookies y guarde el cookies.txtarchivo (puede cambiar el nombre de archivo / destino).
  2. Abra una terminal y úsela wgetcon la --load-cookies=FILENAMEopción, p. Ej.

    wget --load-cookies=cookies.txt http://en.wikipedia.org/wiki/User:A
    • Para el rizo , escurl --cookie cookies.txt ...

(Intentaré actualizar esta respuesta para los usuarios de Chrome / Chromium)

La manera difícil: use curl (preferiblemente) o wget para administrar toda la sesión

  • Un procedimiento detallado está más allá del alcance de esta respuesta, pero usa curl con --cookie-jaro wget con las --save-cookies --keep-session-cookiesopciones, junto con el método HTTP / S PUT para iniciar sesión en un sitio, guardar las cookies de inicio de sesión y luego usarlas para simular un navegador
  • No es necesario decir que esto requiere pasar por la fuente HTML para la página de inicio de sesión (obtener nombres de campo de entrada, etc.), y a menudo es difícil llegar a trabajar para sitios que utilizan algo más que la simple autenticación de inicio de sesión / contraseña.
  • Consejo: si sigue esta ruta, a menudo es mucho más sencillo tratar con la versión móvil de un sitio web (si está disponible), al menos para el paso de autenticación.
ish
fuente
1
Buen consejo. El código para el sitio móvil es a menudo mucho más limpio.
CousinCocaine
44
¿Cómo se ve tal cookies.txt?
Frederick Nord
Este complemento "Exportar cookies" creó un archivo de cookies con las cookies para cada sitio al que he accedido en Firefox. Entonces, si sigue esta respuesta, presentará todas sus cookies en cualquier sitio al que acceda. Considero que esto es una falla de seguridad en esta respuesta. Puede solucionar este problema fácilmente utilizando: grep mydomain cookies.txt > mydomain-cookies.txt
erik.weathers
Puede usar el complemento Cookie Manager en Firefox para exportar solo las cookies seleccionadas.
Hans Ginzel
7

Otra solución fácil que funcionó para mí sin instalar nada adicional:

Esto le dará un comando que puede pegar directamente en su shell, que tiene todas sus credenciales de cookies, por ejemplo

curl 'https://mysite.test/my-secure-dir/picture1.jpg' \ 
-H 'User-Agent: Mozilla/5.0 ...' \
-H 'Cookie: SESSIONID=abcdef1234567890'

Luego puede modificar la URL en el comando para obtener lo que desee.

BlackShift
fuente
4

Con cURL es realmente fácil manejar las cookies en ambos sentidos.

curl www.target-url.com -c cookie.txtluego guardará un archivo llamado cookie.txt. Pero tienes que entrar en el, por lo que es necesario utilizar --Hojas con argumentos como: curl -X --data "var1=1&var2=2" www.target-url.com/login.php -c cookie.txt. Una vez que obtenga la cookie loggued, puede enviarla con: curl www.target-url.com/?user-page.php -b cookie.txt

Simplemente use -c (--cookie) o -b (--cookie-jar) para guardar y enviar.

Nota 1: Usar cURL CLI es mucho más fácil que PHP y quizás más rápido;)

Para guardar el contenido final, puede agregarlo fácilmente > filename.htmla su comando cURL y luego guardar el código html completo.

Nota 2 sobre "completo": no puede procesar javascript con cURL, solo obtenga el código fuente.

erm3nda
fuente
1
-XEl parámetro significa "hacer publicación", pero el uso --data=xxx -Xes implícito, por lo que puede eliminarlo con seguridad.
erm3nda
-besread cookie
Timo
3

Para aquellos que todavía están interesados ​​en estas preguntas, hay una extensión de Chrome muy útil llamada CurlWGet que le permite generar una solicitud wget/ curlcon medidas de autenticación, etc. con un solo clic. Para instalar esta extensión, siga los pasos a continuación:

  1. Instale la extensión desde Chrome Webstore .
  2. Vaya a la página web que desea descargar.
  3. Inicia la descarga.
  4. La extensión generará un enlace para ti.

¡Disfrutar!

jehon
fuente
2

La publicación de blog Wget with Firefox Cookies muestra cómo acceder al archivo de datos sqlite en el que Firefox almacena sus cookies. De esa forma, no es necesario exportar manualmente las cookies para usarlas con wget. Un comentario sugiere que no funciona con cookies de sesión, pero funcionó bien para los sitios con los que lo probé.

Falko Menge
fuente
2

Echa un vistazo a Cliget para Firefox.

Cuando esté a punto de descargar, en el cuadro de diálogo de descarga final tendrá la opción de copiar la descarga como línea de comando curl en el portapapeles.

weberjn
fuente
1

¿Has probado esto?

wget --user=username --password=password http://en.wikipedia.org/wiki/User:A
Corey Whitaker
fuente
sí, desafortunadamente eso no funcionó = (
user784637
66
Nota: esta sintaxis funciona solo para la autenticación HTTP básica (donde su navegador muestra un cuadro de diálogo especial de Nombre de usuario / Contraseña), no para la autenticación basada en la página web.
ish
El formato básico de la URL de autenticación HTTP es admin: [email protected] pero, como ha dicho @izx, el HTTP básico es la función del navegador, no la programación ni el código PHP. Si algún día necesita acceder a una URL protegida con htaccess, puede usar ese modo; D
erm3nda
No voté en contra, pero esta no es una buena forma de autenticar: si usted, por accidente, hace públicos estos scripts, la gente puede usar su contraseña.
Willem Van Onsem
1
¿Qué pasa con los votos negativos? Puede que no sea una respuesta general, pero sigue siendo una respuesta.
Overcode
1

Intenta algo como:

wget --keep-session-cookies --save-cookies cookies.txt --post-data 'user=goyamy&passwrd=mypassword' http://forum.ubuntu-it.org/

Vea también este enlace:

¿Cómo descargar esta página web con wget?

kenorb
fuente
Al igual que cualquier salida. Se usa > filename.htmlpara guardar la salida en el directorio actual o poner una ruta de archivo completa. Esto se aplica a los sistemas Linux y Windows.
erm3nda
Entonces, estoy viendo que wget tiene muchas características como cURL, o viceversa. Puede hacer POST, por lo que puede iniciar sesión en sitios web. Interesante.
erm3nda
1

Para inicios de sesión basados ​​en sitios web más complicados, también debe considerar usar un script Python y algún módulo que imite un navegador, como http://wwwsearch.sourceforge.net/mechanize/ en lugar de curlo wget.

De esta forma, las cookies de sesión se manejan automáticamente, puede seguir los enlaces y completar los formularios de inicio de sesión, y así "guiarse" usted mismo a través del proceso de inicio de sesión como si estuviera usando su navegador web.

StW
fuente
Sí, usar mecanizar puede ser realmente agradable. También (y originalmente) disponible en Perl, si esa es más su taza de té.
andol