Automatizar solicitações da web usando curl?

12

Eu tenho alguns sistemas "corporativos" que tenho que usar no trabalho. Alguns deles são terríveis, com frames, pop-ups e tal.

Eu estava pensando em automatizar algumas coisas usando curl ou algo parecido. Eu preciso de login, clique em hiperlinks, defina alguns dados, e eles fazem algum post.

É possível usar o curl? Ou eu vou ser melhor usando algo como o Selenium?

    
por Somebody still uses you MS-DOS 14.04.2011 / 05:06

3 respostas

12

Sim, é totalmente possível com o curl. O mais importante será salvar e recarregar os cookies entre os usos de curl com --cookie-jar . Você também pode postar dados de formulário conforme necessário. Eu costumo usar um add-on do Firefox chamado Live HTTP Headers para capturar o que acontece quando navego em um site. Ele irá gravar todos os cabeçalhos, mas também qualquer post de formulário que seja muito útil ao tentar descobrir o que fazer com o curl. Eu escrevi scripts bash automatizando várias invocações de curl e uso pipes e arquivos temporários (cortesia de mktemp ) para fazer algum processamento limitado na página da Web, mas se tiver que fazer muito processamento de página normalmente mudo para Perl com LibWWW.

    
por 14.04.2011 / 20:47
14

Para casos simples de download do conteúdo de uma página, use curl ou wget . Ambas são ferramentas de linha de comando projetadas para baixar arquivos via HTTP e ter muitas opções. No seu caso, você provavelmente precisará tornar essas ferramentas mais parecidas com um navegador; a resposta de lutzky e a resposta do penguin359 menciona algumas opções de curl e wget que são úteis nesse aspecto.

Às vezes, quando você precisa efetuar login , é muito mais fácil primeiro fazer login manualmente em um navegador da web e, em seguida, exportar os cookies do navegador da web (extensões < href="https://addons.mozilla.org/pt-BR/firefox/addon/allcookies/"> allcookies ou Exportar Cookies para o Firefox pode ajudar).

Se você precisar analisar o conteúdo de algumas páginas ou postar formulários , talvez seja necessário usar ferramentas mais sofisticadas do que curl e wget. Algumas boas ferramentas são Perl com LWP (libwww) e HTML::TreeBuilder (HTML-Tree) ou Python com bibliotecas padrão (especialmente httplib e htmllib ).

Para mais interações complexas com um site, a referência é WWW: : Mecanizar . Esta biblioteca Perl define funções de alto nível para interagir com um site como um navegador da Web, incluindo POST, formulários, cookies, mas não Javascript. Se o Perl não for sua xícara de chá, essa biblioteca tem imitações com recursos semelhantes em outros idiomas, como Mecanismo do Python e Mecanismo Ruby .

Por fim, quando você precisa do Javascript , a abordagem usual é usar um navegador da Web orientado por uma estrutura de automação do navegador. Selênio e Watir são populares escolhas; veja também Existem Quaisquer boas ferramentas além do SeleniumRC que podem buscar páginas da Web, incluindo conteúdo pós-pintado por JavaScript?

    
por 14.04.2011 / 22:37
6

Meu favorito é wget , então vou dar um exemplo com isso. O que você quer fazer é replicar a sessão do seu navegador o mais próximo possível, então use os argumentos relevantes da linha de comando. Os que são necessários dependem de quão completamente o site verifica seu navegador. --referer (sic) é geralmente suficiente, mas você também pode precisar de --user-agent e --load-cookies .

Essa técnica é basicamente falsificação de navegador - você está tentando fazer com que wget se apresente ao site como o navegador. O maior problema que você enfrentará é o CAPTCHA, que não está presente no site de exemplo que você forneceu. Além disso, certifique-se de respeitar as políticas de tempo do site (45 segundos neste caso) ou você provavelmente será bloqueado.

Provavelmente não é possível fazer o download do mesmo arquivo em sessões diferentes - o site concede o download de privilégios no arquivo específico para uma sessão específica.

    
por 09.12.2011 / 15:35

Tags