2012-09-13 13 views
66

Ho 2 pagine: xyz.com/a e xyz.com/b. Posso accedere solo a xyz.com/b se e solo se accedo prima allo xyz.com/a. Se si accede a xyz.com/b senza passare attraverso l'altro, ottengo semplicemente l'accesso negato (nessun reindirizzamento per l'accesso) tramite il browser. Una volta effettuato il login allo xyz.com/a, posso accedere all'altra.CURL per accedere a una pagina che richiede un accesso da un'altra pagina

Il problema si verifica utilizzando il comando di arricciatura. Posso accedere con successo a xyz.com/a usando curl, ma poi provare xyx.com/b e ottengo l'accesso negato.

Io uso il seguente:

curl --user user:pass https://xyz.com/a #works ok 
curl https://xyz.com/b #doesn't work 

Ho provato con la seconda linea con & senza la parte utente/password e ancora non funziona. Entrambe le pagine utilizzano la stessa CA, quindi non è un problema. Eventuali suggerimenti? Grazie

risposta

81

Il sito Web utilizza probabilmente cookies per memorizzare le informazioni sulla sessione. Quando si esegue

curl --user user:pass https://xyz.com/a #works ok 
curl https://xyz.com/b #doesn't work 

curl viene eseguito due volte, in due sessioni separate. Pertanto, quando viene eseguito il secondo comando, i cookie impostati dal primo comando non sono disponibili; è come se avessi effettuato il login alla pagina a in una sessione del browser e hai provato ad accedere alla pagina b in una diversa.

Quello che dovete fare è Salva i cookie creati dal primo comando:

curl --user user:pass --cookie-jar ./somefile https://xyz.com/a 

e poi leggere di nuovo in quando si esegue il secondo:

curl --cookie ./somefile https://xyz.com/b 

In alternativa si può provare scaricando entrambi i file nello stesso comando, che penso utilizzeranno gli stessi cookie.

+0

Questo è strano perché quando provo questo, non funziona in quanto il cookie memorizzato in 'somefile' contiene il parametro path ('/a' in questo caso) e non viene inoltrato alla seconda chiamata. Se modifico il cookie nel file e metto solo una barra, funziona (cookie inoltrato alla seconda chiamata).Sai se è possibile impedire la memorizzazione del percorso nel file cookie? –

36

Dopo un po 'googling ho trovato questo:

curl -c cookie.txt -d "LoginName=someuser" -d "password=somepass" https://oursite/a 
curl -b cookie.txt https://oursite/b 

Non ho idea se funziona, ma si potrebbe portare nella giusta direzione.

+0

funzionato senza che '-d "xxx"' grazie comunque – deadfish

+5

Ciò funzionerà se si dispone di un sito web che prevede un modulo da presentare. Avrai bisogno di guardare la fonte e trovare l'immagine

e vedere qual è il nome dei campi e su quale URL deve essere pubblicato. È possibile utilizzare il debugger del browser Web per cercare la richiesta di post in modo da poter vedere ciò che viene inviato. Questo è un po 'più facile. – stonefury

+0

Grazie a @stonefury per quel commento - mi ha salvato così tanto tempo di debug :) – Rob1991

36

Inoltre si potrebbe desiderare di accedere tramite browser e ottenere il comando con tutte le intestazioni tra cui i cookie:

Aprire la scheda di rete di strumenti di sviluppo, il login, accedere alla pagina necessario, utilizzare "Copia come cURL" .

screenshot

+5

Questa è una risposta profonda! Non risponde direttamente alla domanda, perché mostra * come * per rispondere. – bgStack15

+2

questa è una delle risposte più utili. Ti permette davvero di osservare e comprendere anche l'autenticazione multi-step. –

+0

si prega di controllare la mia domanda per quanto riguarda lo stesso problema https://stackoverflow.com/questions/48391862/login-to-page-using-html-form-and-cookies-for-authentication –