Como uso o wget / curl para baixar de um site no qual estou conectado?

46

Algumas partes da wikipedia aparecem de maneira diferente quando você está conectado. Gostaria de wget páginas de usuário para que apareçam como se eu estivesse conectado.

Existe uma maneira de eu wget páginas de usuário como esta

http://en.wikipedia.org/wiki/User:A

esta é a página de login:

http://en.wikipedia.org/w/index.php?title=Special:UserLogin&returnto=Login&campaign=ACP3
user784637
fonte
Consulte stackoverflow.com/a/21919431/1136018 para obter uma solução fácil usando o Google Chrome + cURL
pterojacktyl

Respostas:

50

A maneira mais fácil: faça login no seu navegador e dê os cookies para o wget

Método mais fácil: em geral, você precisa fornecer ao wget ou enrolar os cookies (conectados) de um site específico para que eles busquem páginas como se você estivesse conectado .

Se você estiver usando o Firefox, é fácil fazer isso através do complemento Export Cookies . Instale o complemento e:

  1. Vá para Ferramentas ... Exportar cookies e salve o cookies.txtarquivo (você pode alterar o nome do arquivo / destino).
  2. Abra um terminal e use wgetcom a --load-cookies=FILENAMEopção, por exemplo

    wget --load-cookies=cookies.txt http://en.wikipedia.org/wiki/User:A
    • Para enrolar , écurl --cookie cookies.txt ...

Tentarei atualizar esta resposta para usuários do Chrome / Chromium.

Da maneira mais difícil: use curl (de preferência) ou wget para gerenciar toda a sessão

  • Um tutorial detalhado está além do escopo desta resposta, mas você usa o curl com o --cookie-jarou wget com as --save-cookies --keep-session-cookiesopções, junto com o método HTTP / S PUT para efetuar login em um site, salvar os cookies de login e usá-los para simule um navegador.
  • Escusado será dizer que isso exige que você acesse a fonte HTML da página de login (obtenha nomes de campos de entrada etc.) e é difícil trabalhar com sites que usam algo além da autenticação simples de login / senha.
  • Dica: se você seguir esse caminho, geralmente será muito mais simples lidar com a versão móvel de um site (se disponível), pelo menos na etapa de autenticação.
ish
fonte
1
Boa dica. O código do site para celular geralmente é muito mais limpo.
CousinCocaine
4
como é esse cookie.txt?
Frederick Nord
Este complemento "Export Cookies" criou um arquivo de cookies com todos os sites que eu acessei no Firefox. Portanto, se você seguir esta resposta, apresentará todos os seus cookies em qualquer site que esteja acessando. Considero isso uma falha de segurança nesta resposta. Você pode solucionar esse problema facilmente usando: grep mydomain cookies.txt > mydomain-cookies.txt
erik.weathers 15/17
Você pode usar o complemento Gerenciador de Cookies no Firefox para exportar apenas os cookies selecionados.
Hans Ginzel
7

Outra solução fácil que funcionou para mim sem instalar nada extra:

  • Abra a guia "Rede" da ferramenta "Desenvolvedor Web" : Ctrl-Shift-E
  • Visite a página que você deseja salvar (por exemplo, uma foto atrás de um login)
  • Clique com o botão direito do mouse na solicitação e escolha 'Copiar' -> 'Copiar como cURL'

Isso lhe dará um comando que você pode colar diretamente no seu shell, que possui todas as suas credenciais de cookie, por exemplo

curl 'https://mysite.test/my-secure-dir/picture1.jpg' \ 
-H 'User-Agent: Mozilla/5.0 ...' \
-H 'Cookie: SESSIONID=abcdef1234567890'

Você pode modificar o URL no comando para buscar o que quiser.

BlackShift
fonte
4

Com o cURL é realmente fácil manipular cookies de ambos os modos.

curl www.target-url.com -c cookie.txtem seguida, salvará um arquivo chamado cookie.txt. Mas você precisa fazer login, por isso necessidade de usar --data com argumentos como: curl -X --data "var1=1&var2=2" www.target-url.com/login.php -c cookie.txt. Depois de obter o cookie com registro de log, você pode enviá-lo com: curl www.target-url.com/?user-page.php -b cookie.txt

Basta usar -c (--cookie) ou -b (--cookie-jar) para salvar e enviar.

Nota1: O uso do cURL CLI é muito mais fácil que o PHP e talvez mais rápido;)

Para salvar o conteúdo final, você pode facilmente adicionar > filename.htmlao seu comando cURL e salvar o código html completo.

Nota 2 sobre "cheio": você não pode renderizar javascript com cURL, basta obter o código-fonte.

erm3nda
fonte
1
-Xparâmetro significa "do post", mas o uso --data=xxx -Xestá implícito, para que você possa removê-lo com segurança.
Erm3nda
-béread cookie
Timo
3

Para aqueles que ainda estão interessados ​​nessas perguntas, há uma extensão do Chrome muito útil chamada CurlWGet que permite gerar uma wget/ curlsolicitação com medidas de autenticação etc. com apenas um clique. Para instalar esta extensão, siga os passos abaixo:

  1. Instale a extensão da Chrome Webstore .
  2. Vá para a página da web que você deseja baixar.
  3. Inicie o download.
  4. A extensão irá gerar um link para você.

Desfrutar!

jehon
fonte
2

A postagem do blog Wget com Firefox Cookies mostra como acessar o arquivo de dados sqlite no qual o Firefox armazena seus cookies. Dessa forma, não é necessário exportar manualmente os cookies para usar com o wget. Um comentário sugere que ele não funciona com cookies de sessão, mas funcionou bem nos sites com os quais eu tentei.

Falko Menge
fonte
2

dê uma olhada no cliget para Firefox.

Quando você está prestes a baixar, na caixa de diálogo final de download, você tem a opção de copiar o download como linha de comando de ondulação para a área de transferência.

weberjn
fonte
1

Você já tentou isso?

wget --user=username --password=password http://en.wikipedia.org/wiki/User:A
Corey Whitaker
fonte
sim - infelizmente isso não funcionou = (
user784637
6
Nota: esta sintaxe funciona apenas para autenticação HTTP básica (onde o navegador exibe uma caixa de diálogo Nome de usuário / Senha especial), não para autenticação baseada em página da web.
Ish
O formato básico do URL da autenticação HTTP é admin: [email protected], mas como a @izx disse, o HTTP básico é o recurso do navegador, não a programação nem o código PHP. Se algum dia você precisar acessar um htaccess protegido url você pode usar esse modo; D
erm3nda
Não diminuí o voto, mas essa não é uma boa maneira de autenticar: se você, por acidente, tornar públicos esses scripts, as pessoas poderão usar sua senha.
Willem Van Onsem
1
O que há com os votos negativos? Pode não ser uma resposta fácil, mas ainda assim uma resposta.
Overcode
1

Tente algo como:

wget --keep-session-cookies --save-cookies cookies.txt --post-data 'user=goyamy&passwrd=mypassword' http://forum.ubuntu-it.org/

Veja também este link:

Como baixar esta página da web com o wget?

kenorb
fonte
Assim como qualquer saída. Use > filename.htmlpara salvar a saída no diretório atual ou colocar um caminho de arquivo completo. Isso se aplica aos sistemas Linux e Windows.
Erm3nda
Então, estou vendo que o wget tem muitos recursos, como cURL, ou vice-versa. Ele pode fazer o POST, assim como o login em sites. Interessante.
Erm3nda
1

Para logins baseados em sites mais complicados, considere também usar um script Python e algum módulo que imite um navegador, como http://wwwsearch.sourceforge.net/mechanize/ em vez de curlou wget.

Dessa forma, os cookies de sessão são manipulados automaticamente, você pode seguir os links e preencher os formulários de login e, assim, "guiar" você mesmo pelo processo de login como se estivesse usando seu navegador.

StW
fonte
Sim, usar mecanizar pode ser muito bom. Também (e originalmente) disponível em Perl, se é mais a sua xícara de chá.
Andol