Come posso usare wget / curl per scaricare da un sito a cui ho effettuato l'accesso?


46

Alcune parti di Wikipedia appaiono in modo diverso quando hai effettuato l'accesso. Vorrei wget le pagine degli utenti in modo che appaiano come se fossi collegato.

C'è un modo in cui posso wget pagine utente come questa

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

questa è la pagina di accesso:

http://en.wikipedia.org/w/index.php?title=Special:UserLogin&returnto=Login&campaign=ACP3


Vedi stackoverflow.com/a/21919431/1136018 per una soluzione semplice utilizzando Google Chrome + cURL
pterojacktyl

Risposte:


50

Il modo più semplice: accedi con il tuo browser e dai i cookie per wget

Metodo più semplice: in generale, è necessario fornire wget o arricciare i cookie (connessi) da un determinato sito Web per poter recuperare le pagine come se si fosse effettuato l'accesso .

Se stai utilizzando Firefox, è facile farlo tramite il componente aggiuntivo Export Cookies . Installa il componente aggiuntivo e:

  1. Vai su Strumenti ... Esporta cookie e salva il cookies.txtfile (puoi cambiare il nome file / destinazione).
  2. Aprire un terminale e utilizzare wgetcon l' --load-cookies=FILENAMEopzione, ad es

    wget --load-cookies=cookies.txt http://en.wikipedia.org/wiki/User:A
    • Per il ricciolo , lo ècurl --cookie cookies.txt ...

(Proverò ad aggiornare questa risposta per gli utenti di Chrome / Chromium)

Nel modo più difficile: usa curl (preferibilmente) o wget per gestire l'intera sessione

  • Un how-to dettagliato va oltre lo scopo di questa risposta, ma usi curl con --cookie-jaro wget con le --save-cookies --keep-session-cookiesopzioni, insieme al metodo HTTP / S PUT per accedere a un sito, salvare i cookie di login e quindi utilizzarli per simulare un browser.
  • Inutile dire che ciò richiede l'esplorazione dell'origine HTML per la pagina di accesso (ottenere i nomi dei campi di input, ecc.), Ed è spesso difficile mettersi al lavoro per i siti utilizzando qualsiasi cosa oltre alla semplice autenticazione di accesso / password.
  • Suggerimento: se segui questa strada, è spesso molto più semplice gestire la versione mobile di un sito Web (se disponibile), almeno per la fase di autenticazione.

1
Bel consiglio. Il codice per il sito mobile è spesso molto più pulito.
Cugina Cocaina,

4
che aspetto ha un cookie.txt?
Federico Nord,

Questo componente aggiuntivo "Esporta cookie" ha creato un file cookie con i cookie per ogni singolo sito a cui ho avuto accesso in Firefox. Quindi, se segui questa risposta, presenterai tutti i tuoi cookie a qualunque sito tu stia colpendo. Considero questo un difetto di sicurezza in questa risposta. Puoi aggirare facilmente questo problema usando: grep mydomain cookies.txt > mydomain-cookies.txt
erik.weathers il


È possibile utilizzare il componente aggiuntivo Cookie Manager in Firefox per esportare solo i cookie selezionati.
Hans Ginzel,

7

Un'altra soluzione semplice che ha funzionato per me senza installare nulla in più:

  • Apri la scheda "Rete" dello strumento "Web Developer" : Ctrl-Shift-E
  • Visita la pagina che desideri salvare (ad es. Una foto dietro un login)
  • Fai clic con il tasto destro del mouse sulla richiesta e scegli "Copia" -> "Copia come cURL"

Questo ti darà un comando che puoi incollare direttamente nella tua shell, che ha tutte le tue credenziali dei cookie, ad es

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

È quindi possibile modificare l'URL nel comando per recuperare ciò che si desidera.


4

Con cURL è davvero facile gestire i cookie in entrambi i modi.

curl www.target-url.com -c cookie.txtquindi salverà un file chiamato cookie.txt. Ma è necessario effettuare il login, quindi c'è bisogno di usare --data con argomenti come: curl -X --data "var1=1&var2=2" www.target-url.com/login.php -c cookie.txt. Una volta ricevuto il cookie registrato puoi inviarlo con: curl www.target-url.com/?user-page.php -b cookie.txt

Basta usare -c (--cookie) o -b (--cookie-jar) per salvare e inviare.

Nota 1: l'utilizzo di CLI cURL è molto più semplice di PHP e forse più veloce;)

Per salvare il contenuto finale puoi facilmente aggiungere > filename.htmlal tuo comando cURL, quindi salvare il codice HTML completo.

Nota2 su "full": Yo non può eseguire il javascript con cURL, basta ottenere il codice sorgente.


1
-XIl parametro sta per "do post", ma l'utilizzo --data=xxx -Xè implicito, quindi puoi rimuoverlo sicuramente.
erm3nda,

-bèread cookie
Timo

3

Per coloro che sono ancora interessati a queste domande, c'è un'utilissima estensione di Chrome chiamata CurlWGet che ti consente di generare una wget/ curlrichiesta con misure di autenticazione, ecc. Con un clic. Per installare questa estensione, attenersi alla seguente procedura:

  1. Installa l'estensione dal Chrome Webstore .
  2. Vai alla pagina Web che desideri scaricare.
  3. Inizia il download.
  4. L'estensione genererà un collegamento per te.

Godere!


2

Il post sul blog Wget con i cookie di Firefox mostra come accedere al file di dati sqlite in cui Firefox memorizza i suoi cookie. In questo modo non è necessario esportare manualmente i cookie per l'uso con wget. Un commento suggerisce che non funziona con i cookie di sessione, ma ha funzionato bene per i siti con cui l'ho provato.


2

dai un'occhiata al cliget per Firefox.

Quando stai per scaricare, nella finestra di dialogo di download finale hai la possibilità di copiare negli appunti la riga di comando come arricciatura.


1

Hai provato questo?

wget --user=username --password=password http://en.wikipedia.org/wiki/User:A

sì - sfortunatamente non ha funzionato = (
user784637

6
Nota: questa sintassi funziona solo per l'autenticazione HTTP di base (in cui il browser visualizza una speciale finestra di dialogo Nome utente / Password), non per l'autenticazione basata su pagina Web.
Is

Il formato dell'URL di autenticazione HTTP di base è admin: admin@www.url.com ma come ha detto @izx, l'HTTP di base è la funzionalità del browser, non la programmazione né il codice PHP. Se un giorno devi accedere a un URL protetto da htaccess puoi usare quella modalità; D
erm3nda,

Non ho votato a fondo, ma questo non è un buon modo per autenticarsi: se tu, per caso, rendi pubblici questi script, le persone possono usare la tua password.
Willem Van Onsem,

1
Cosa sono i downvotes? Potrebbe non essere una risposta universale ma comunque una risposta.
Overcode

1

Prova qualcosa del tipo:

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

Vedi anche questo link:

Come scaricare questa pagina Web con wget?


Proprio come qualsiasi output. Utilizzare > filename.htmlper salvare l'output nella directory corrente o inserire un percorso file completo. Questo vale sia per i sistemi Linux che per quelli Windows.
erm3nda,

Quindi, vedendo che wget ha molte funzionalità come cURL o viceversa. Può fare POST, quindi può fare il login ai siti web. Interessante.
erm3nda,

1

Per accessi basati su siti Web più complicati dovresti anche considerare di utilizzare uno script Python e alcuni moduli che imitano un browser, come http://wwwsearch.sourceforge.net/mechanize/ anziché curlo wget.

In questo modo i cookie di sessione vengono gestiti automaticamente, è possibile seguire i collegamenti e compilare i moduli di accesso, quindi "copiarli" tramite il processo di accesso come se si stesse utilizzando il browser Web.


Sì, usare meccanize può essere davvero bello. Inoltre (e originariamente) disponibile in Perl, se è più la tua tazza di tè.
andol
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.