web-dev-qa-db-fra.com

la redirection curl 302 ne fonctionne pas (ligne de commande)

Dans le navigateur, la navigation vers cette URL lance une requête 302 (déplacée temporairement) qui à son tour télécharge un fichier.

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

Lorsque je vois ce qui se passe réellement via Chrome tools network, je vois que la redirection va vers un chemin généré dynamiquement qui s'annule immédiatement après le téléchargement. En d'autres termes, même si je connais ce chemin complet Je n'aurai pas le temps de l'appeler manuellement.

Alors, comment utiliser la ligne de commande pour imiter les actions du navigateur?

J'ai essayé

curl --cookies bin/cookies.txt -O -L " http://www.targetsite.com/target.php/?event=download&task_id=12 " --compressed

mais cela renvoie juste du charabia. L'objectif est de télécharger par programme ce fichier sans avoir à naviguer sur le site. Malheureusement, je ne peux pas partager le site ici car il est derrière une connexion.

20
user2029890

Vous devez fournir le -L ou --location option pour permettre à curl de suivre les redirections HTTP.

Citant de 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.
49
devnull