Я пытаюсь автоматизировать вход на веб-страницу курса, которую я должен проверить в этом семестре. Я знаю, что POST-запрос, который я делаю, выполняется правильно, потому что я попадаю на промежуточную страницу перенаправления, которую вы получаете только при успешном входе в систему.

Я в основном бью один из них. This page should automatically redirect. If nothing is happening please use the continue link below. страницы. К сожалению, поскольку curl не следует за этим последним перенаправлением, он, похоже, не устанавливает последние файлы cookie для сохранения моего сеанса.

Я читал man для curl, но я не могу найти правильный способ сделать это (--max-time и --max-redirs - это то, что я пробовал и не работает).

Может кто-нибудь сказать мне, что мне нужно сделать, чтобы решить эту проблему?

Вот с чем я работаю

LOGINURL="http://www.[redacted].edu/login/index.php" # This is not https because they don't support it.
COURSEURL="http://www.[redacted].edu/course/[redacted]"
USERAGENT="Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:31.0) Gecko/20100101 Firefox/31.0"
COOKIEJAR="${HOME}/edu.cookies"
POSTDATA="[redacted]"
curl -o "index.html" --referer "${LOGINURL}" --user-agent "${USERAGENT}" --cookie-jar "${COOKIEJAR}" --data "${POSTDATA}" "${LOGINURL}"
curl -o "course.html" --referer "${LOGINURL}" --user-agent "${USERAGENT}" --cookie "${COOKIEJAR}" "${COURSEURL}"

PS ссылка, которая предоставляется на промежуточной странице перенаправления, является той же самой ссылкой, что и URL-адрес COURSEURL, поэтому ручное скручивание не работает.

1 ответ1

0

Я чувствую себя абсолютно глупо. Опция -L была всем, что мне было нужно. Со страницы руководства:

-L, --location
              (HTTP/HTTPS)  If  the  server reports that the requested page has moved to a different location (indicated with a Location: header and a 3XX response code),
              this option will make curl redo the request on the new place. If used together with -i, --include or -I, --head, headers from all requested  pages  will  be
              shown.  When  authentication is used, curl only sends its credentials to the initial host. If a redirect takes curl to a different host, it won't be able to
              intercept the user+password. See also --location-trusted on how to change this. You can limit the amount of redirects to follow by  using  the  --max-redirs
              option.

              When  curl follows a redirect and the request is not a plain GET (for example POST or PUT), it will do the following request with a GET if the HTTP response
              was 301, 302, or 303. If the response code was any other 3xx code, curl will re-send the following request using the same unmodified method.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .