Часто я хочу автоматизировать HTTP-запросы. В настоящее время я использую Java (и commons http client), но, вероятно, предпочту использовать подход, основанный на сценариях. Что-то действительно быстрое и простое. Где я могу установить заголовок, перейдите на страницу и не беспокойтесь о настройке всего жизненного цикла OO, установив каждый заголовок, вызывая html-парсер ... Я ищу решение на ЛЮБОЙ язык, предпочтительные сценарииScripting HTTP более эффективно
ответ
Как насчет использования PHP + Curl, или просто bash?
Python urllib может быть тем, что вы ищете.
Альтернативно powershell предоставляет полную библиотеку .NET http в среде сценариев.
Часто людям требуется urllib2 больше, чем urllib. –
Mechanize для Python, кажется, прост в использовании: http://wwwsearch.sourceforge.net/mechanize/
Механизм для Ruby также хорошо работает. –
Он также, кажется, существует и для perl. – emil
Посмотрите Selenium. Он генерирует код для C#, Java, Perl, PHP, Python и Ruby, если вам нужно настроить скрипт.
Из кода, который генерируется, какие библиотеки http они используют? По умолчанию или такие, как механизация? – Zombies
Selenium имеет библиотеку обертки для каждого языка. – jbochi
Насколько я понимаю, Selenium использует полнофункциональный браузер, такой как firefox. Мне кажется, что я убиваю мышку ядерной бомбой. – johannes
Watir звучит близко к тому, что вы хотите, хотя он (как и Selenium, связанный с другим ответом) фактически открывает браузер для работы. Вы можете увидеть некоторые примеры here. Другая система захода на посадку на основе браузера + воспроизведения - sahi.
Если ваше приложение использует WSGI, то paste - отличный вариант.
Механизм, связанный в другом ответе, является «браузером в библиотеке», и есть клоны в perl, Ruby и Python. Перл один из них является оригинальным, и это, кажется, путь, если вы не хотите браузер. Проблема с этим подходом заключается в том, что весь код интерфейса (который может полагаться на JavaScript) не будет реализован.
Использует ли httpunit для java JavaScript? – Zombies
Кроме того, когда он открывает браузер ... он становится активным окном и манипулирует кликами/событиями? – Zombies
Никогда не использовал его. Если не используется браузер (или он каким-то образом загружает переводчика JS), я не думаю, что это произойдет. –
Некоторые рубин библиотеки:
- httparty: действительно интересно, философия интересна.
- mechanize: классическая библиотека качественной веб-автоматизации.
- scrubYt: puzzling на первый взгляд, но интересно использовать.
Моя очередь: wget или perl с lwp. Вы найдете пример на связанной странице.
В зависимости от того, что вы делаете, самым простым решением является bash + curl.
Человек страница последний доступен здесь:
http://curl.haxx.se/docs/manpage.html
Вы можете сделать сообщения, а также получает, HTTPS, показать заголовки, работа с печеньем, основной и дайджест-проверки подлинности HTTP, туннель через все виды прокси, в том числе NTLM на * nix среди прочего.
curl также доступен как общая библиотека с поддержкой C и PHP.
НТН
C.
Я тестирую REST API, на данный момент и нашел ReST Client очень приятно. Это GUI-программа, но тем не менее вы можете сохранять и восстанавливать запросы в виде файлов XML (или создавать их), вставлять, писать тестовые скрипты и т. Д. И это основанная на Java (что не является специальным преимуществом, но вы упомянули об этом).
Минус-очки для записи сессий. Клиент ReST хорош для апатридов «one-shot».
Если это не подходит для ваших нужд, я бы пошел на уже упомянутый Mechanize (или WWW-Mechanize, так как он называется CPAN).
Twill довольно хорошо и сделано для тестирования. Его можно использовать как скрипт, в интерактивном сеансе или в программе Python.
Если у вас есть простые потребности (выберите страницу, а затем проанализируйте ее), трудно избить 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;
Yup, LWP и HTML :: TreeBuilder обычно идут вместе. –
@ Леонардо, как шоколад и арахисовое масло - хорошо само по себе, но лучше вместе. – daotoad
Perl и WWW::Mechanize может сделать веб-соскоб и т.д. простой и легкий, в том числе легкой обработки форм (скажем, вы хотите, чтобы перейти на страницу входа в систему, введите имя пользователя и пароль и отправить форму, обработку куки/скрытые идентификаторы сеанса точно так же, как браузер ...)
Аналогичным образом поиск или извлечение ссылок с выбранной страницы тривиально.
Если вам нужно разобрать материал из результирующих страниц, с которыми WWW :: Mechanize не может легко помочь, затем подайте результат на HTML::TreeBuilder, чтобы упростить синтаксический анализ.
У вас есть ответ от дробовика, потому что в этом пространстве есть много хороших продуктов, предназначенных для разных вариантов использования. Почему вы хотите автоматизировать HTTP-запросы? Что вы делаете с ответами? Вам всегда нужно устанавливать HTTP-заголовки в запросах или просматривать заголовки в ответе? Всегда ли нормально следовать перенаправлениям, или вам нужно знать о них? Вам нужны функции браузера, такие как DOM и JavaScript? И т.д. –
Он меняется. Дома я иногда вижу точку в автоматизации некоторых вещей (но не в том смысле, как макросы firefox), мне всегда нравилось иметь дело с httpbots. Моя первая программа была пауком. На работе нам нужно некоторое тестирование модулей HTTP. Что касается ответов, да, это будет хорошо прочитано на пару дней. – Zombies
Можно ли это превратить в вики? На самом деле не один ответ, который можно принять. – Zombies