2012-09-13 20 views
66

Tengo 2 páginas: xyz.com/a y xyz.com/b. Solo puedo acceder al xyz.com/b si y solo si inicio sesión en xyz.com/a primero. Si se accede al xyz.com/b sin pasar por el otro, simplemente obtengo acceso denegado (no se redirecciona para iniciar sesión) a través del navegador. Una vez que inicie sesión en xyz.com/a, puedo acceder al otro.CURL para acceder a una página que requiere un inicio de sesión desde una página diferente

Mi problema es hacerlo con el comando curl. Puedo iniciar sesión exitosamente en xyz.com/a usando curl, pero luego intento xyx.com/b y obtengo acceso denegado.

uso el siguiente:

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

He intentado usar la segunda línea con & sin la parte de usuario/contraseña y sigue sin funcionar. Ambas páginas usan la misma CA, entonces eso no es un problema. ¿Alguna sugerencia? Gracias

Respuesta

81

El sitio web probablemente usa cookies para almacenar su información de sesión. Cuando se ejecuta

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

curl se ejecuta dos veces, en dos sesiones separadas. Por lo tanto, cuando se ejecuta el segundo comando, las cookies establecidas por el primer comando no están disponibles; es como si hubiera iniciado sesión en la página a en una sesión de navegador, e intentó acceder a la página b en una página diferente.

Lo que hay que hacer es ahorro las cookies creadas por el primer comando:

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

y luego leerlos en cuando se ejecuta la segunda:

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

alternativa, se puede tratar descargando ambos archivos en el mismo comando, que creo que usará las mismas cookies.

+0

Esto es extraño porque cuando intento esto, no funciona ya que la cookie almacenada en 'somefile' contiene el parámetro de ruta ('/a' en este caso) y no se reenvía a la segunda llamada. Si edito la cookie en el archivo y pongo una barra solo, funciona (cookie reenviada a la segunda llamada).¿Sabes si es posible evitar el almacenamiento de la ruta en el archivo de cookies? –

36

Después de algunas google encontré esto:

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

Ni idea de si funciona, pero puede ser que le llevará en la dirección correcta.

+0

trabajaron sin que '-d "xxx"' gracias de todos modos – deadfish

+5

Esto funcionará si usted tiene un sitio web que espera un formulario para ser presentada. Tendrá que ver la fuente y buscar la imagen

y ver cuál es el nombre de los campos y en qué URL se debe publicar. Puede utilizar su depurador de navegador web para buscar la solicitud posterior para que pueda ver lo que se envía. Eso es un poco más fácil. – stonefury

+0

Gracias @stonefury por ese comentario - me ahorró mucho tiempo de depuración :) – Rob1991

36

También es posible que desee conectarse a través del navegador y obtener el comando con todas las cabeceras incluyendo las galletas:

Abrir la pestaña Red de Herramientas de Desarrollo, Entrar, ve a la página es necesario, utilice "Copiar como Curl" .

screenshot

+5

¡Esta es una respuesta profunda! No responde la pregunta directamente, porque muestra * cómo * para responderla. – bgStack15

+2

esa es una de las respuestas más útiles. Realmente le permite observar y comprender incluso la autenticación en varios pasos. –

+0

por favor revise mi pregunta con respecto al mismo problema https://stackoverflow.com/questions/48391862/login-to-page-using-html-form-and-cookies-for-authentication –

Cuestiones relacionadas