Como posso usar uma ferramenta de linha de comando como o Wget para fazer login em um site OpenID?


10

Especificamente, eu gostaria de poder baixar determinadas páginas do meu perfil de usuário nos vários sites do Stack Exchange. Gostaria, no entanto, de fazer isso automaticamente (usando um crontrabalho), na linha de comando e em um formato analisável. Eu prefiro usar o Linux para isso, mas poderia ter acesso a uma máquina Mac ou Windows, se necessário.

Idealmente, eu gostaria de usar uma ferramenta como Wget ou cURL para buscar as páginas. Não sei como passar pelo logon. Vi sugestões que mencionam que você pode fazer login via Firefox, exportar o cookie relevante e importá-lo para o Wget através de sua --load-cookiesopção. Por exemplo aqui e aqui . Embora isso funcione se eu acabei de fazer login, isso não acontece depois de um tempo. Eu acho que porque o token de identificação precisa ser atualizado.

Portanto, logo após fazer login no SU e exportar meus cookies, eu posso fazer:

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

Depois de alguns minutos, recebo um erro 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.

Então, como posso efetuar login automaticamente em um site habilitado para OpenID na linha de comando?


PS. Acho que isso é mais adequado aqui do que em aplicativos da Web, pois minha pergunta é realmente sobre o aspecto da linha de comando e não os detalhes reais da página da web em questão. Eu acho que qualquer solução será aplicável a todos os sites OpenID .


3
Você consultou a API do SE ( api.stackexchange.com ) para ver se ela fornece as informações que você está procurando? Essa é a maneira oficial de obter acesso programático aos dados e usa o OAuth para autenticar.
heavyd

@ Heavyd Sim, eu meio que esperava não ter que me aprofundar na API para isso. Se essa é a única maneira, acho que vou precisar. De uma olhada superficial, não parece que eu possa automatizar o processo de login por meio da API. Você sabe se posso me autenticar de uma maneira que não exija nenhuma entrada ativa de mim? Se eu entender os documentos corretamente para obter dados que requer autenticação I terá que entrar manualmente no.
terdon

Na verdade, não usei a API do SE, mas em outras implementações do OAuth, usei o login uma vez e recebi um token que é válido por tempo indeterminado.
heavyd

Respostas:


1

Você não pode, porque os cookies são atualizados de vez em quando. Isso é para fins de segurança, a única maneira de fazer isso é como você já fez. pelo menos, do meu entendimento.


Acabei de ver que essa é uma pergunta muito antiga ... Opa.
Mararten

-3

(Re-) Leia a página de manual wgete veja as descrições dos sinalizadores --usere --password.

Observe que não é recomendável passar uma senha como argumento de linha de comando, pois qualquer pessoa que executa pspode vê-la. A melhor prática é não salvar senhas brutas em nenhum lugar, mas a próxima melhor é colocá-la em um arquivo que somente o proprietário possa ler.


3
Os sinalizadores mencionados são para autenticação baseada em HTTP (básica, resumo, etc.). O SE não usa nenhum desses para autenticação. Eles contam com um provedor OpenID de terceiros para autenticação.
heavyd
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.