Baixe o site HTTPS disponível apenas através do nome de usuário e senha com wget?

5

Estou tentando baixar recursivamente o site, que normalmente está disponível apenas quando você faz login.

Eu tenho um nome de usuário e senha válidos, mas o problema é que preciso fazer login por meio da interface da Web, portanto, usar --user=user and --password=password não ajuda.

wget baixa apenas uma página da Web com texto: Desculpe esta página não está disponível, talvez você tenha esquecido de fazer o login?

É possível fazer o download?

Eu não posso usar --user, --password mesmo na página de login porque não há login de recuperação de arquivo FTP / HTTP como mencionado em man wget :

--user=user
--password=password
    Specify the username user and password password for both FTP and
    HTTP file retrieval.

O login gráfico clássico está disponível.

Se eu tentar fazer isso: wget --save-cookies coookies --keep-session-cookies --post-data='j_username=usr&j_password=pwd' 'https://idp2.civ.cvut.cz/idp/Authn/UserPassword' . Usando o método POST para fazer login e tentando salvar cookies, o arquivo coookies está vazio e a página salva é uma página de erro.

O URL é https://idp2.civ.cvut.cz/idp/Authn/UserPassword . Na verdade, quando eu quero fazer o login, ele me redireciona para esta página e quando eu logro com sucesso, ele me redireciona de volta para a página onde eu estava antes ou para alguma página onde eu queria estar após o login (exemplo: https://progtest.fit.cvut.cz/ .

    
por MichalH 22.05.2015 / 23:32

7 respostas

7

As informações da sessão provavelmente são salvas em um cookie para permitir que você navegue para outras páginas depois de efetuar login.

Se este for o caso, você pode fazer isso em duas etapas:

  1. Use as opções wget --save-cookies mycookies.txt e --keep-session-cookies na página de login do site, juntamente com as opções --username e --password
  2. Use a opção wget --load-cookies mycookies.txt nas páginas subseqüentes que você está tentando recuperar.

EDITAR

Se a opção --password e --username não funcionar, você deverá descobrir as informações enviadas ao servidor pela página de login e imitá-las:

  • Para uma solicitação de GET , você pode adicionar os parâmetros GET diretamente no endereço que o wget deve buscar (certifique-se de citar corretamente os caracteres & , = e outros caracteres especiais). O URL provavelmente seria parecido com https://the_url?user=foo&pass=bar .
  • Para uma solicitação de POST , você pode usar a opção wget de --post-data=the_needed_info para usar o método post nas informações de login necessárias.

EDIT 2

Parece que você realmente precisa do método POST com o j_username e j_password set. Tente a opção --post-data='j_username=yourusername&j_password=yourpassword para wget .

EDIT 3

Com a página de origem, pude entender um pouco mais do que está acontecendo. Dito isto, não posso ter certeza de que funciona porque, bem, eu não tenho (nem quero) credenciais válidas.

Dito isso, aqui está o que está acontecendo:

  1. A página https://progtest.fit.cvut.cz/ define um cookie PHPSESSID e apresenta as opções de login.
  2. Clicar no botão login envia uma solicitação para https://progtest.fit.cvut.cz/shibboleth-fit.php , que pega o cookie PHPSESSID (não tenho certeza se o usa) e o redireciona para o mecanismo SSO com um URL especialmente criado para você, semelhante a este: código%
  3. A resposta do SSO define um novo cookie chamado https://idp2.civ.cvut.cz/idp/profile/SAML2/Redirect/SSO?SAMLRequest=SOME_VERY_LONG_AND_UNIQUE_ID e redireciona você para a página _idp_authn_lc_key , que o redireciona novamente para https://idp2.civ.cvut.cz:443/idp/AuthnEngine (a página de login real)
  4. Você insere suas credenciais e envia os dados de postagem https://idp2.civ.cvut.cz:443/idp/Authn/UserPassword e j_username junto com o cookie da resposta do SSO
  5. ???

Os primeiros quatro passos podem ser feitos com j_password assim:

origin='https://progtest.fit.cvut.cz/'

# Get the PHPSESSID cookie
wget --save-cookies phpsid.cki --keep-session-cookies "$origin"

# Get the _idp_authn_lc_key cookie
wget --load-cookies phpsid.cki  --save-cookies sso.cki --keep-session-cookies --header="Referer: $origin" 'https://progtest.fit.cvut.cz/shibboleth-fit.php'

# Send your credentials
wget --load-cookies sso.cki --save-cookies auth.cki --keep-session-cookies --post-data='j_username=usr&j_password=pwd' 'https://idp2.civ.cvut.cz/idp/Authn/UserPassword'

Observe que wget segue o redirecionamento sozinho, o que nos ajuda bastante nesse caso.

    
por 22.05.2015 / 23:52
4

Por que você está brincando com wget ? Use melhor o navegador sem cabeçalho para automatizar essa tarefa.

O que é um navegador sem cabeçalho, você pergunta?

A headless browser is a web browser without a graphical user interface. They provide automated control of a web page in an environment similar to popular web browsers, but are executed via a command line interface or using network communication.

Dois navegadores populares sem cabeça são phantomjs (javascript) e Ghost.py (python).

Solução usando phantomjs

Primeiro, você precisará instalar o phantomjs . Nos sistemas baseados em Ubuntu, você pode instalá-lo usando o gerenciador de pacotes ou pode compilá-lo a partir de sua página inicial .

sudo apt-get install phantomjs

Depois disso, você escreve o script javascript e o executa usando o phantomjs:

phantomjs script.js

É isso.

Agora, para saber como implementá-lo no seu caso, acesse o guia de início rápido . Por exemplo, para fazer login no Facebook automaticamente e tirar uma foto, é possível usar a essência fornecida aqui :

// This code login's to your facebook account and takes snap shot of it.
var page = require('webpage').create();
var fillLoginInfo = function(){
var frm = document.getElementById("login_form");
frm.elements["email"].value = 'your fb email/username';
frm.elements["pass"].value = 'password';
frm.submit();
}
page.onLoadFinished = function(){
if(page.title == "Welcome to Facebook - Log In, Sign Up or Learn More"){
page.evaluate(fillLoginInfo);
return;
}
else
page.render('./screens/some.png');
console.log("completed");
phantom.exit();
}
page.open('https://www.facebook.com/');

Procure a documentação para implementá-la no seu caso específico. Se você tiver alguns problemas com o seu site https devido a erros de ssl, execute seu script da seguinte forma:

phantomjs --ssl-protocol=any script.js

Solução usando o Ghost.py

Para instalar o Ghost.py, você precisará de pip :

sudo apt-get install python-pip   #On a Debian based system
sudo pip install Ghost.py

Agora você instalou o Ghost.py. Agora, para usá-lo dentro de um script python, basta seguir a documentação fornecida em sua página inicial . Eu tentei usar o Ghost.py em um site https, mas de alguma forma não funcionou para mim. Tente e veja se funciona.

UPDATE: solução baseada em GUI

Você também pode usar ferramentas como Selenium para automatizar o processo de login e recuperar as informações. É muito fácil de usar. Você só precisa instalar um plugin para o seu navegador em aqui . E então você pode gravar seu processo e reproduzi-lo mais tarde.

    
por 25.05.2015 / 03:17
2

Tente usar 'curl'

curl --data "j_username=value1&j_password=value2" https://idp2.civ.cvut.cz/idp/Authn/UserPassword

Você pode precisar examinar o tipo de resposta e definir o cabeçalho 'content-type' para corresponder; ou seja, XML, json etc

    
por 25.05.2015 / 04:56
0

Além dos cookies, use user agent como firefox, chrome etc. Como a maioria dos servidores odeia os gerenciadores de dwonload.

Alternativamente use a extensão do firefox álbum de recortes

  • fácil de usar
  • GUI
por 26.05.2015 / 07:31
0

A maneira que eu gostaria de fazer isso é: Primeiro eu usaria plugins de HTTP ao vivo pluggin para o firefox para analisar a comunicação. Referers e todas essas coisas podem ser necessárias. Depois que eu tiver essa informação, eu imitarei isso com wget economizando cookies e carregando quando necessário.

    
por 26.05.2015 / 08:44
0

Para uma ferramenta mais moderna para realizar esse tipo de operação, confira HTTPie :

link

    
por 14.12.2017 / 15:43
0

Eu estava procurando a mesma coisa e finalmente escrevi uma ferramenta baseada na user43791 resposta.

Portanto, o que você está procurando talvez seja algo assim: link

Deve ser muito fácil adaptar isso a qualquer outro site shibboleth e é baseado apenas no wget!

    
por 14.02.2018 / 23:16

Tags