CURL для доступа к странице, для которой требуется логин с другой страницы

У меня есть 2 страницы: xyz.com/a и xyz.com/b. Я могу получить доступ только к xyz.com/b тогда и только тогда, когда я сначала вхожу в xyz.com/a. Если вы обращаетесь к xyz.com/b, не переходя через другой, я просто получаю доступ через отказ в доступе (без переадресации на вход в систему) через браузер. После входа в систему xyz.com/a я могу получить доступ к другому.

Моя проблема делает это с помощью команды curl. Я могу успешно войти в систему xyz.com/a с помощью curl, но затем попробуйте xyx.com/b, и я получаю отказ в доступе.

Я использую следующее:

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

Я пробовал использовать вторую строку с частью пользователя и пароля и без нее, но не работает. Обе страницы используют один и тот же СА, так что это не проблема. Какие-либо предложения? Благодаря

Ответ 1

Веб-сайт, вероятно, использует cookie для хранения информации о сеансе. Когда вы запустите

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

curl выполняется дважды в двух отдельных сеансах. Таким образом, когда выполняется вторая команда, cookie, установленные первой командой, недоступны; так же, как если бы вы вошли на страницу a в одном сеансе браузера и попытались получить доступ к странице b в другой.

Что вам нужно сделать, это сохранить файлы cookie, созданные первой командой:

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

а затем снова зачитайте их при запуске второго:

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

В качестве альтернативы вы можете попробовать загрузить оба файла в одной команде, которые, как я думаю, будут использовать одни и те же файлы cookie.

Ответ 2

Также вы можете войти в систему через браузер и получить команду со всеми заголовками, включая файлы cookie:

Откройте вкладку "Сеть" в Инструментах разработчика, войдите в систему, перейдите на нужную страницу, используйте "Копировать как cURL".

screenshot

Ответ 3

После некоторого googling я нашел это:

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

Не знаю, работает ли это, но может привести вас в правильном направлении.