2010-01-11 3 views
8

Часто я хочу автоматизировать HTTP-запросы. В настоящее время я использую Java (и commons http client), но, вероятно, предпочту использовать подход, основанный на сценариях. Что-то действительно быстрое и простое. Где я могу установить заголовок, перейдите на страницу и не беспокойтесь о настройке всего жизненного цикла OO, установив каждый заголовок, вызывая html-парсер ... Я ищу решение на ЛЮБОЙ язык, предпочтительные сценарииScripting HTTP более эффективно

+8

У вас есть ответ от дробовика, потому что в этом пространстве есть много хороших продуктов, предназначенных для разных вариантов использования. Почему вы хотите автоматизировать HTTP-запросы? Что вы делаете с ответами? Вам всегда нужно устанавливать HTTP-заголовки в запросах или просматривать заголовки в ответе? Всегда ли нормально следовать перенаправлениям, или вам нужно знать о них? Вам нужны функции браузера, такие как DOM и JavaScript? И т.д. –

+0

Он меняется. Дома я иногда вижу точку в автоматизации некоторых вещей (но не в том смысле, как макросы firefox), мне всегда нравилось иметь дело с httpbots. Моя первая программа была пауком. На работе нам нужно некоторое тестирование модулей HTTP. Что касается ответов, да, это будет хорошо прочитано на пару дней. – Zombies

+0

Можно ли это превратить в вики? На самом деле не один ответ, который можно принять. – Zombies

ответ

0

Как насчет использования PHP + Curl, или просто bash?

2

Python urllib может быть тем, что вы ищете.

Альтернативно powershell предоставляет полную библиотеку .NET http в среде сценариев.

+0

Часто людям требуется urllib2 больше, чем urllib. –

6

Посмотрите Selenium. Он генерирует код для C#, Java, Perl, PHP, Python и Ruby, если вам нужно настроить скрипт.

+0

Из кода, который генерируется, какие библиотеки http они используют? По умолчанию или такие, как механизация? – Zombies

+0

Selenium имеет библиотеку обертки для каждого языка. – jbochi

+1

Насколько я понимаю, Selenium использует полнофункциональный браузер, такой как firefox. Мне кажется, что я убиваю мышку ядерной бомбой. – johannes

6

Watir звучит близко к тому, что вы хотите, хотя он (как и Selenium, связанный с другим ответом) фактически открывает браузер для работы. Вы можете увидеть некоторые примеры here. Другая система захода на посадку на основе браузера + воспроизведения - sahi.

Если ваше приложение использует WSGI, то paste - отличный вариант.

Механизм, связанный в другом ответе, является «браузером в библиотеке», и есть клоны в perl, Ruby и Python. Перл один из них является оригинальным, и это, кажется, путь, если вы не хотите браузер. Проблема с этим подходом заключается в том, что весь код интерфейса (который может полагаться на JavaScript) не будет реализован.

+0

Использует ли httpunit для java JavaScript? – Zombies

+0

Кроме того, когда он открывает браузер ... он становится активным окном и манипулирует кликами/событиями? – Zombies

+0

Никогда не использовал его. Если не используется браузер (или он каким-то образом загружает переводчика JS), я не думаю, что это произойдет. –

0

Некоторые рубин библиотеки:

  • httparty: действительно интересно, философия интересна.
  • mechanize: классическая библиотека качественной веб-автоматизации.
  • scrubYt: puzzling на первый взгляд, но интересно использовать.
6

Моя очередь: wget или perl с lwp. Вы найдете пример на связанной странице.

3

В зависимости от того, что вы делаете, самым простым решением является bash + curl.

Человек страница последний доступен здесь:

http://curl.haxx.se/docs/manpage.html

Вы можете сделать сообщения, а также получает, HTTPS, показать заголовки, работа с печеньем, основной и дайджест-проверки подлинности HTTP, туннель через все виды прокси, в том числе NTLM на * nix среди прочего.

curl также доступен как общая библиотека с поддержкой C и PHP.

НТН

C.

4

Я тестирую REST API, на данный момент и нашел ReST Client очень приятно. Это GUI-программа, но тем не менее вы можете сохранять и восстанавливать запросы в виде файлов XML (или создавать их), вставлять, писать тестовые скрипты и т. Д. И это основанная на Java (что не является специальным преимуществом, но вы упомянули об этом).

Минус-очки для записи сессий. Клиент ReST хорош для апатридов «one-shot».

Если это не подходит для ваших нужд, я бы пошел на уже упомянутый Mechanize (или WWW-Mechanize, так как он называется CPAN).

2

Twill довольно хорошо и сделано для тестирования. Его можно использовать как скрипт, в интерактивном сеансе или в программе Python.

6

Если у вас есть простые потребности (выберите страницу, а затем проанализируйте ее), трудно избить LWP::Simple и HTML::TreeBuilder.

use strict; 
use warnings; 

use LWP::Simple; 
use HTML::TreeBuilder; 

my $url = 'http://www.example.com'; 
my $content = get($url) or die "Couldn't get $url"; 

my $t = HTML::TreeBuilder->new_from_content($content); 
$t->eof; 
$t->elementify; 

# Get first match: 
my $thing = $t->look_down(_tag => 'p', id => qr/match_this_regex/); 

print $thing ? $thing->as_text : "No match found\n"; 

# Get all matches: 
my @things = $t->look_down(_tag => 'p', id => qr/match_this_regex/); 

print $_ ? $_->as_text : "No match found" for @things; 
+0

Yup, LWP и HTML :: TreeBuilder обычно идут вместе. –

+0

@ Леонардо, как шоколад и арахисовое масло - хорошо само по себе, но лучше вместе. – daotoad

2

Perl и WWW::Mechanize может сделать веб-соскоб и т.д. простой и легкий, в том числе легкой обработки форм (скажем, вы хотите, чтобы перейти на страницу входа в систему, введите имя пользователя и пароль и отправить форму, обработку куки/скрытые идентификаторы сеанса точно так же, как браузер ...)

Аналогичным образом поиск или извлечение ссылок с выбранной страницы тривиально.

Если вам нужно разобрать материал из результирующих страниц, с которыми WWW :: Mechanize не может легко помочь, затем подайте результат на HTML::TreeBuilder, чтобы упростить синтаксический анализ.