Curl 302 перенаправление не работает (командная строка)

В браузере, перемещаясь по этому URL-адресу, инициируется 302 (перемещенный временно) запрос, который, в свою очередь, загружает файл.

http://www.targetsite.com/target.php/?event=download&task_id=123

Когда я просматриваю то, что на самом деле происходит через сетевые инструменты Chrome, я вижу, что перенаправление переходит к динамически сгенерированному пути, который отменяется сразу после загрузки. Другими словами, даже если я знаю, что полный путь у меня не будет времени, чтобы его вручную вызвать.

Итак, как при использовании командной строки я могу имитировать действия браузера?

Я пробовал

curl --cookies bin/cookies.txt -O -L " http://www.targetsite.com/target.php/?event=download&task_id=123" - сжатый

но это просто возвращает тарабарщину. Цель этого - программно загрузить этот файл без необходимости навигации по сайту. К сожалению, я не могу поделиться сайтом здесь, поскольку он находится за входом в систему.

Ответы

Ответ 1

Вам нужно предоставить опцию -L или --location, чтобы включить curl для просмотра перенаправления HTTP.

Цитата из man curl:

   -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  --loca‐
          tion-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.