¿Cómo puedo usar una herramienta de línea de comandos como Wget para iniciar sesión en un sitio OpenID?

10

Específicamente, me gustaría poder descargar ciertas páginas de mi perfil de usuario en varios sitios de Stack Exchange. Sin embargo, me gustaría hacer esto automáticamente (usando un crontrabajo), desde la línea de comandos y en un formato analizable. Prefiero usar Linux para esto, pero podría obtener acceso a una máquina Mac o Windows si es necesario.

Idealmente, me gustaría usar una herramienta como Wget o cURL para buscar las páginas. Sin embargo, no sé cómo pasar el inicio de sesión. He visto sugerencias que mencionan que puede iniciar sesión a través de Firefox, exportar la cookie relevante e importarla a Wget a través de su --load-cookiesopción. Por ejemplo aquí y aquí . Si bien esto funciona si acabo de iniciar sesión, no lo hace después de un tiempo. Supongo que porque el token de identificación debe actualizarse.

Entonces, justo después de iniciar sesión en SU ​​y exportar mis cookies, puedo hacer:

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

Sin embargo, después de unos minutos, aparece un error 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.

Entonces, ¿cómo puedo iniciar sesión automáticamente en un sitio web habilitado para OpenID desde la línea de comandos?


PD. Creo que esto es más adecuado aquí que en las aplicaciones web, ya que mi pregunta es realmente sobre el aspecto de la línea de comandos y no sobre los detalles reales de la página web en cuestión. Supongo que cualquier solución será aplicable a todos los sitios de OpenID .

terdon
fuente
3
¿Has buscado en la API SE ( api.stackexchange.com ) para ver si proporciona la información que estás buscando? Esta es la forma oficial de obtener acceso programático a los datos y utiliza OAuth para autenticarse.
heavyd
@heavyd sí, esperaba que no tuviera que profundizar en la API para esto. Si esa es la única forma, supongo que tendré que hacerlo. Sin embargo, desde un punto de vista superficial, no parece que pueda automatizar el proceso de inicio de sesión a través de la API. ¿Sabes si puedo autenticar de una manera que no requiera ninguna entrada activa de mi parte? Si entiendo la documentación correctamente para obtener los datos que requiere autenticación necesitaré que entrar manualmente en.
terdon
En realidad no he usado la API SE, pero en otras implementaciones de OAuth, he usado tu inicio de sesión una vez y te dan un token que es bueno indefinidamente.
heavyd

Respuestas:

1

No puede, porque las cookies se actualizan de vez en cuando. Esto es por razones de seguridad, la única forma de hacerlo es como ya lo hizo. al menos, desde mi entendimiento.

Maarten
fuente
Acabo de ver que esta es una pregunta muy antigua ... ¡Vaya!
Maarten
-3

(Re-) Lea la página de manual para wgetver las descripciones de las banderas --usery --password.

Tenga en cuenta que no se recomienda pasar una contraseña como argumento de línea de comando, ya que cualquiera que lo ejecute pspuede verla. La mejor práctica es no guardar contraseñas sin procesar en ningún lado, pero lo mejor es ponerlo en un archivo que solo el propietario pueda leer.

Jeff N
fuente
3
Las banderas que menciona son para la autenticación basada en HTTP (básica, resumen, etc.). SE no utiliza ninguno de estos para la autenticación. Dependen de un proveedor de OpenID de terceros para la autenticación.
heavyd