Comment puis-je utiliser un outil de ligne de commande comme Wget pour me connecter à un site OpenID?


10

Plus précisément, j'aimerais pouvoir télécharger certaines pages de mon profil utilisateur sur les différents sites Stack Exchange. Je voudrais cependant le faire automatiquement (à l'aide d'un crontravail), à partir de la ligne de commande et dans un format analysable. Je préfère de loin utiliser Linux pour cela, mais je pourrais avoir accès à une machine Mac ou Windows si nécessaire.

Idéalement, je voudrais utiliser un outil comme Wget ou cURL pour récupérer les pages. Je ne sais pas comment passer outre la connexion. J'ai vu des suggestions qui mentionnent que vous pouvez vous connecter via Firefox, exporter le cookie pertinent et l'importer dans Wget via son --load-cookiesoption. Par exemple ici et ici . Bien que cela fonctionne si je viens de me connecter, ce n'est pas le cas après un certain temps. Je suppose que le jeton d'identification doit être actualisé.

Donc, juste après vous être connecté à SU et avoir exporté mes cookies, je peux faire:

wget --load-cookies cookies.txt \
  https://superuser.com/users/151431/terdon?tab=responses

Cependant, après quelques minutes, j'obtiens une erreur 404:

wget -O ~/stack/$(date +%s) --load-cookies ~/cookies.txt \
   https://superuser.com/users/151431/terdon?tab=responses

--2013-08-06 04:04:14--  https://superuser.com/users/151431/terdon?tab=responses
Resolving superuser.com (superuser.com)... 198.252.206.16
Connecting to superuser.com (superuser.com)|198.252.206.16|:80... connected.
HTTP request sent, awaiting response... 404 Not Found
2013-08-06 04:04:15 ERROR 404: Not Found.

Alors, comment puis-je me connecter automatiquement à un site Web compatible OpenID à partir de la ligne de commande?


PS. Je pense que cela convient mieux ici que dans les applications Web, car ma question concerne vraiment l'aspect de la ligne de commande et non les détails réels de la page Web en question. Je suppose que toute solution sera applicable à tous les sites OpenID .


3
Avez-vous examiné l'API SE ( api.stackexchange.com ) pour voir si elle fournit les informations que vous recherchez? Il s'agit de la manière officielle d'obtenir un accès programmatique aux données et il utilise OAuth pour s'authentifier.
Heavyd

@heavyd ouais, j'espérais un peu que je n'aurais pas à me plonger dans l'API pour cela. Si c'est la seule façon, je suppose que je devrai le faire. D'un coup d'œil rapide, il ne semble pas que je puisse automatiser le processus de connexion via l'API. Savez-vous si je peux m'authentifier d'une manière qui ne nécessite aucune entrée active de ma part? Si je comprends bien les documents pour obtenir des données qui nécessitent une authentification, je
devrai me

Je n'ai pas réellement utilisé l'API SE, mais dans d'autres implémentations OAuth, j'ai utilisé votre connexion une fois et vous recevez un jeton qui est valable indéfiniment.
Heavyd

Réponses:


1

Vous ne pouvez pas, car les cookies se rafraîchissent de temps en temps. C'est à des fins de sécurité, la seule façon de le faire est la façon dont vous l'avez déjà fait. du moins, d'après ma compréhension.


Je viens de voir que c'est une très vieille question ... Oups.
Maarten

-3

(Re-) Lisez la page de manuel pour wgetet regardez les descriptions des drapeaux --useret --password.

Notez qu'il n'est pas recommandé de passer un mot de passe comme argument de ligne de commande, car toute personne qui l'exécute pspeut le voir. La meilleure pratique consiste à ne sauvegarder les mots de passe bruts nulle part, mais la prochaine meilleure consiste à les placer dans un fichier que seul le propriétaire peut lire.


3
Les indicateurs que vous mentionnez sont pour l'authentification basée sur HTTP (basique, résumé, etc.). SE n'utilise aucun de ces éléments pour l'authentification. Ils s'appuient sur un fournisseur OpenID tiers pour l'authentification.
Heavyd
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.