Estou tentando usar o Wget para baixar uma página, mas não consigo passar da tela de login.
Como envio o nome de usuário / senha usando os dados de postagem na página de login e depois faço o download da página real como um usuário autenticado?
Estou tentando usar o Wget para baixar uma página, mas não consigo passar da tela de login.
Como envio o nome de usuário / senha usando os dados de postagem na página de login e depois faço o download da página real como um usuário autenticado?
Respostas:
Com base na página do manual:
# Log in to the server. This only needs to be done once.
wget --save-cookies cookies.txt \
--keep-session-cookies \
--post-data 'user=foo&password=bar' \
--delete-after \
http://server.com/auth.php
# Now grab the page or pages we care about.
wget --load-cookies cookies.txt \
http://server.com/interesting/article.php
Verifique se o --post-data
parâmetro está corretamente codificado em porcentagem (especialmente e comercial!) Ou se a solicitação provavelmente falhará. Certifique-se também de que user
e password
são as chaves corretas; você pode descobrir as chaves corretas pesquisando o HTML da página de login (consulte o recurso "inspecionar" do navegador e encontre o name
atributo nos campos de nome de usuário e senha).
-p
( --page-requisites
) para isso.
--delete-after
à primeira recuperação para que você não acabar salvando a página de resultados de login.
WGET64: missing URL
. Coloquei o comando wget inteiro em uma linha e removi o `\`
Se você precisar dele para uso único, poderá efetuar login via navegador e copiar os cabeçalhos necessários posteriormente:
Use "Copiar como cURL" na guia Rede das Ferramentas do desenvolvedor (recarregue a página após a abertura) e substitua o sinalizador de cabeçalho do curl -H
e --data
pelo wget --header
e --post-data
.
wget
com o cookie correto não; Suspeito que o serviço da Web verifique vários cabeçalhos GET diferentes, mesmo os aparentemente sem importância, como "User-Agent" ou "Cache-Control".
wget
os dados foram fornecidos de maneira errada.
Forneci diretamente os cookies de uma conexão existente ao wget com --no-cookies e o cabeçalho de solicitação HTTP do cookie. No meu caso, era um login da universidade Moodle, onde o login parece mais complexo (usando várias solicitações com um ticket de login). Eu adicionei --post-data porque era uma solicitação POST. Por exemplo, obtenha a lista de todos os usuários do Moodle:
wget --no-cookies --header "Cookie: <name>=<value>" --post-data 'tab=search&name=+&personsubmit=Rechercher&keywords=&keywordsoption=allmine' https://moodle.unistra.fr/message/index.php
Eu tive o mesmo problema. Minha solução foi fazer o login via Chrome e salvar os dados dos cookies em um arquivo de texto. Isso é feito facilmente com esta extensão do Chrome : extensão de exportação Chrome cookie.txt .
Quando você obtém os dados dos cookies, também há um exemplo de como usá-los com o wget. Uma linha de comando simples de copiar e colar é fornecida a você.
Eu queria um one-liner que não baixasse nenhum arquivo; Aqui está um exemplo de canalizar a saída do cookie para a próxima solicitação. Eu testei apenas o seguinte no Gentoo, mas ele deve funcionar na maioria dos ambientes * nix:
wget -q -O /dev/null --save-cookies /dev/stdout --post-data 'u=user&p=pass' 'http://example.com/login' | wget -q -O - --load-cookies /dev/stdin 'http://example.com/private/page'
(esta é uma linha, embora provavelmente envolva seu navegador)
Se você deseja que a saída seja salva em um arquivo, altere -O -
para-O /some/file/name
Se eles estiverem usando autenticação básica:
wget http://username:password@www.domain.com/page.html
Se eles estiverem usando dados de formulário POST, será necessário usar algo como cURL .
Nota: O Lynx deve ter sido compilado com o sinalizador --enable-persistent-cookies para que isso funcione
Quando você deseja usar o wget para baixar algum arquivo de um site que requer login, basta um arquivo de cookie. Para gerar o arquivo de cookie, eu escolho o lynx. lynx é um navegador de texto. Primeiro, você precisa de um arquivo de configuração para o lynx salvar o cookie. Crie um arquivo lynx.cfg. Escreva essas configurações no arquivo.
SET_COOKIES:TRUE
ACCEPT_ALL_COOKIES:TRUE
PERSISTENT_COOKIES:TRUE
COOKIE_FILE:cookie.file
Então inicie o lynx com este comando:
lynx -cfg=lynx.cfg http://the.site.com/login
Depois de inserir o nome de usuário e a senha, selecione 'preservar-me neste computador' ou algo semelhante. Se o login for bem-sucedido, você verá uma bela página de texto do site. E você sai. No diretório atual, você encontrará um arquivo de cookie chamado cookie.file. É disso que precisamos para o wget.
Então o wget pode baixar o arquivo do site com este comando.
wget --load-cookies ./cookie.file http://the.site.com/download/we-can-make-this-world-better.tar.gz
Exemplo para baixar com o wget no servidor um link de arquivo grande que pode ser obtido no seu navegador.
Por exemplo, usando o Google Chrome.
Faça o login onde precisar e pressione download. Vá para baixar e copiar seu link.
Em seguida, abra o DevTools em uma página na qual você efetua login, acesse o Console e obtenha seus cookies digitandodocument.cookie
Agora, vá para o servidor e faça o download do seu arquivo: wget --header "Cookie: <YOUR_COOKIE_OUTPUT_FROM_CONSOLE>" <YOUR_DOWNLOAD_LINK>