Должен ли я использовать Perl LWP или lib curl? - PullRequest
10 голосов
/ 30 декабря 2011

Как я понимаю, (с точки зрения клиента HTTP) у нас есть LWP и libcurl (WWW :: Curl), доступные в Perl.Есть ли у нас какие-либо критерии для выбора?

Ответы [ 5 ]

23 голосов
/ 31 декабря 2011

Говоря только с точки зрения API, я предпочитаю LWP. Проблема с Curl состоит в том, что он очень очевидно сделан из библиотеки C. Например:

$curl->setopt(CURLOPT_URL, 'http://example.com');
my $response_body;
$curl->setopt(CURLOPT_WRITEDATA, \$response_body);

my $retcode = $curl->perform;
if ($retcode == 0) {
    # Response is now in $response_body
}
else {
    die "Error\n";
}

Настройка параметров с помощью setopt()? Возвращать ответ, используя ссылку на один из этих параметров? Наличие метода, возвращающего 0 в случае успеха? Эти вещи идиоматичны в коде C, но не в современном OO Perl.

Вот примерно тот же код в LWP:

my $response = $lwp->get('http://example.com');
if( $response->is_success ) {
    $response_body = $response->decoded_content;
}
else {
    die "Error\n";
}

Призыв к is_success() более самодокументирован и лучше сочетается с языком OO. C-кодеры привыкли видеть код вроде if($retcode == 0) в случае успеха по историческим причинам, но нет никаких причин, по которым Perl-кодеры должны использовать эту привычку. Выше также показано, как LWP легко заботится о декодировании контента для нас, что Керл оставляет за вами.

Это не показано выше, но Curl также заставляет вас самостоятельно обрабатывать параметры GET / POST. В LWP вы передаете хеш, и он разбивает пары name=value для вас. Печенье тоже. Керл очень низкий уровень в этом смысле.

Скручивание может быть быстрее, но спросите себя, насколько это будет иметь значение в вашем приложении. Вы действительно собираетесь отправить 100 запросов за короткий промежуток времени? Если так, то Керл вполне может стоить того. Если нет, то перейдите к простоте реализации, которая, я думаю, LWP победит без особой борьбы.

10 голосов
/ 30 декабря 2011

LWP является наиболее часто используемым и работает с де-факто стандартными модулями, такими как HTTP :: Request, HTTP :: Headers, HTTP :: Cookies и т. Д. WWW :: Curl иногда более мощный и иногда быстрее, ноимеет своего рода странный интерфейс, который делает очевидным, что он оборачивает библиотеку C.Я бы использовал LWP, если нет причин не делать этого.

5 голосов
/ 31 декабря 2011

Мне нравится использовать Mojo :: UserAgent сейчас.Я даже написал об этом для Календаря Перл на 2011 год .

Хотя на самом деле нет ответа на ваш общий вопрос.Вы используете правильный инструмент для вашей работы.Не зная, что вы пытаетесь сделать, практически невозможно вести вас.Изучите оба, а затем выберите тот, который облегчит вашу задачу.Можно было бы иметь лучшие ручки и циферблаты для того, что вам нужно сделать.

4 голосов
/ 31 декабря 2011

Все зависит от ваших требований и ожиданий.Я думаю, что libcurl и LWP имеют немного разные наборы функций, и они работают немного по-разному.

См. Это libcurl против тестов производительности LWP или это .Я призываю вас провести собственное сравнение ваших собственных функций и окружения, чтобы сделать его действительно актуальным.

(Отказ от ответственности: я являюсь основным автором libcurl)

1 голос
/ 01 января 2012

Я бы предпочел LWP, потому что это основной модуль Perl. Для взаимодействия с веб-службами инструмент командной строки curl имеет несколько удобных функций, таких как - anyauth , и вы также можете легко отправлять запросы HTTP PUT и HTTP DELETE. Я думаю, что PUT и DELETE были добавлены как удобные методы в LWP совсем недавно в 2011 , поправьте меня, если я ошибаюсь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...