Automatizando solicitações da Web usando curl?

13

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 assim. Preciso fazer login, clique em hiperlinks, defina alguns dados e eles farão alguma postagem.

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

Alguém ainda usa você no MS-DOS
fonte
1
Eu usaria o zope.testbrowser do Python para isso.
phunehehe
2
Você precisa poder usar Javascript?
intuited
2
Usar uma sessão é apenas enviar o ID da sessão com cada solicitação. Em um cookie ou no parâmetro GET. wgete curlpode usar o arquivo de cookie Netscape; portanto, se o seu navegador também usar esse, poderá ser suficiente para especificá-lo ao downloader. Então, que tipo de navegador você está usando?
Manatwork
2
Não há sorte para uma solução simples com esses. Firefox e Chrome usam SQLite, o Opera possui um formato de arquivo de dados binários. Parece que você terá que procurar o ID da sessão e passá-lo manualmente para o downloader.
manatwork

Respostas:

13

Sim, é totalmente possível com o enrolamento. O mais importante será salvar e recarregar cookies entre os usos do curl --cookie-jar. Você também pode postar dados do formulário, conforme necessário. Normalmente, uso um complemento do Firefox chamado Live HTTP Headers para capturar o que acontece quando navego em um site. Ele registra todos os cabeçalhos, mas também as postagens de formulários que são muito úteis ao tentar descobrir o que fazer com o curl. Eu escrevi scripts bash automatizando várias invocações de curl e use 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 da página, normalmente alterno para Perl com LibWWW.

penguin359
fonte
Além dos cabeçalhos HTTP do Firefox Live, o Safari e o Chrome podem exibir os cabeçalhos divididos por objeto no Web Inspector.
21412 bahamat
15

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

Às vezes, quando você precisa fazer login , é muito mais fácil primeiro fazer login manualmente em um navegador da Web e depois exportar os cookies do navegador da Web (extensões como allcookies ou Export Cookies para Firefox podem ajudar).

Se você precisar analisar o conteúdo de algumas páginas ou publicar formulários , poderá precisar de 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 httplibehtmllib ).

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

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

Gilles 'SO- parar de ser mau'
fonte
6

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

Essa técnica é basicamente falsificação de navegador - você está tentando se wgetapresentar ao site como 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 cumprir as políticas de tempo do site (45 segundos neste caso) ou provavelmente será bloqueado.

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

lutzky
fonte
Boa resposta com considerações abrangentes. Graças
xiaohan2012