web-dev-qa-db-fra.com

Comment télécharger un fichier à partir d'un site Web qui invite un formulaire contextuel?

Ces dernières années, nous avons pu télécharger un fichier FedACH à partir du site Web de la Réserve fédérale (frbservices.org) à l'aide de l'utilitaire wget. Le lien ci-dessous fournit la solution originale:

wget comment télécharger le fichier depuis une page Web qui vous invite à cliquer sur la condition "Accepter"

  1. obtenir les cookies:

    wget --post-data="agreementValue=Agree" https://frbservices.org/EPaymentsDirectory/submitAgreement --save-cookies cookie.txt --keep-session-cookies --delete-after
    
  2. télécharger le fichier:

    wget --load-cookies=cookie.txt 'https://frbservices.org/EPaymentsDirectory/FedACHdir.txt?AgreementSessionObject=Agree'
    

L'utilisation de cette commande wget ne fait que télécharger https://www.frbservices.org/EPaymentsDirectory/download.html parce que le site Web demande qu'un formulaire contextuel soit rempli après avoir cliqué sur le bouton "Accepter" maintenant. Existe-t-il un moyen de simplement fermer le formulaire en utilisant wget?

Dans IE et Chrome, les étapes ci-dessous ont été exécutées pour télécharger le fichier souhaité:

  1. Aller à l'URL: https://www.frbservices.org/EPaymentsDirectory/FedACHdir.txt

  2. Cliquez sur le bouton Accepter.

  3. Le formulaire est affiché pour demander des informations sur l'organisation.

  4. Cliquez sur le bouton Fermer du formulaire (je n'ai pas renseigné d'informations).

  5. Aller à l'URL: https://www.frbservices.org/EPaymentsDirectory/FedACHdir.txt

  6. Les téléchargements de fichiers ont réussi.

7
GMP

Le site Web requiert deux cookies: un JSESSIONID valide et le abaDataCaptureCookie appelé cookie d’accord. La première peut être obtenue avec votre première commande wget, la seconde doit être ajoutée manuellement.

  1. Obtenez un JSESSIONID valide et enregistrez-le dans cookies.txt:

    wget --post-data="agreementValue=Agree" frbservices.org/EPaymentsDirectory/submitAgreement --save-cookies cookies.txt --keep-session-cookies --delete-after
    
  2. Ajoutez la ligne abaDataCaptureCookie:

    echo -e "frbservices.org\tFALSE\t/EPaymentsDirectory/\tFALSE\t0\tabaDataCaptureCookie\tabaDataCaptureCookie" >>cookies.txt
    
  3. Télécharger le fichier:

    wget --load-cookies cookies.txt frbservices.org/EPaymentsDirectory/FedACHdir.txt
    

Je ne sais pas trop combien de temps le premier cookie reste valide, mais je suppose que vous ne téléchargerez pas la liste plusieurs fois par heure, donc en obtenir un nouveau à chaque exécution me semble acceptable - c'est l'approche de sécurité finalement appliquée.

Version de script des étapes ci-dessus, utilisant un fichier temporaire comme fichier cookie:

#!/bin/bash
cookiefile=$(mktemp)
wget --post-data="agreementValue=Agree" frbservices.org/EPaymentsDirectory/submitAgreement --save-cookies $cookiefile --keep-session-cookies --delete-after
echo -e "frbservices.org\tFALSE\t/EPaymentsDirectory/\tFALSE\t0\tabaDataCaptureCookie\tabaDataCaptureCookie" >>$cookiefile
wget --load-cookies $cookiefile frbservices.org/EPaymentsDirectory/FedACHdir.txt

L'exécution de ce script enregistre le FedACHdir.txt actuel dans le répertoire en cours sans laisser un cookies.txt traîner, s'il existe déjà un fichier portant ce nom wget ajoute un numéro et le sauvegarde, par exemple. FedACHdir.txt.1.

Pour résoudre ce problème, j’ai trouvé une aide précieuse ici: Format des cookies lors de l’utilisation de wget? · U & L

6
dessert