Поиск по блогу

Показаны сообщения с ярлыком CURL. Показать все сообщения
Показаны сообщения с ярлыком CURL. Показать все сообщения

понедельник, 15 ноября 2010 г.

Delphi: работа с cURL с помощью библиотеки-обертки Curlpas

Indy и Synapse вам надоели? Самое время попробовать что-нибудь новенькое :)

Если кто-нибудь, начитавшись статей про cURL (я писала не раз про работу с cURL в PHP), решит попробовать работать с этой библиотекой и в Delphi, то ничего сложного в этом нет.

Установка CURL и работа с этой библиотекой в Delphi 7


1. Скачиваем файлы библиотеки libcurl с сайта разработчика по ссылке. Из всего разнообразия выбираем те, что подходят для нашей операционки. В моем случае это:
libcurl для Windows

Содержимое папки bin из скачанного архива копируем в C:\WINDOWS\system32\. Там несколько файлов dll:
Файлы библиотеки libcurl

2. Скачиваем готовую библиотеку-обертку CurlPas для работы с libcurl.

3. Распаковываем архив куда-нибудь, например, в C:\Program Files\Borland\Delphi7\Source\Curlpas\. Обратите внимание, в архиве есть еще документация и примеры использования (папка demo).

4. Запускаем батник Makewin.bat с параметром src (или all, чтобы уж не мелочиться :) ).

Смотрим лог выполнения инструкций. Там должно быть что-то вроде "все успешно" по каждой директиве.

5. Можно приступать к тестированию библиотеки. Создаем приложение.

В uses прописываем:
uses
... curlobj;


Помещаем на форму кнопку, в обработчике нажатия пишем код:
procedure TForm1.Button1Click(Sender: TObject);
var
Curl: TCurl;
begin
Curl := TCurl.Create(nil);
Curl.URL := 'http://parsing-and-i.blogspot.com/';
Curl.OutputFile := 'curl.html';
if not Curl.Perform then
ShowMessage(Curl.ErrorString);
Curl.Free;
end;

Запускаем. Все должно без проблем скомпилиться, в итоге после нажатия кнопки в папке с проектом появится файл curl.html с html-кодом главной страницы моего блога :)

Возможные ошибки при установке Curlpas


По каким-то причинам могут не "подхватиться" библиотеки. Тогда после запуска приложения может появиться что-то типа такого сообщения:
Приложению не удалось запуститься, поскольку libcurl-3.dll не был найден. Повторная установка приложения может решить эту проблему.

Ошибка при установке libcurl в Delphi
Если компилятор запрашивает файл libcurl-3.dll, а в скачанном пакете libcurl у вас файл называется libcurl.dll (зависит от версии библиотеки), то найдите файл curl_h.pas (из папки C:\Program Files\Borland\Delphi7\Source\Curlpas\src\, если вы устанавливали по моей инструкции) и в нем исправьте название файла.

Потом перекомпилируйте библиотеку.

Если не находятся какие-то другие dll — еще раз проверьте их наличие в System32 (или другом каталоге, как у вас принято).

Вот, в общем-то, и все — установка завершена, можете работать с библиотекой дальше. В папке doc — достаточно полная документация. А онлайн документация есть здесь.
___

Чтобы быть в курсе обновлений блога, можно подписаться на RSS.

среда, 14 октября 2009 г.

CURL и реализация POST-запросов

С GET-запросами мы вроде как разобрались. Разобраться с POST-запросами будет ничуть не сложнее. В библиотеке CURL предусмотрены возможности отправления POST-запросов, а так же поддержка работы с сессиями.

Разберем сразу на примере. Так как принципы работы такие же, что и принципы работы с POST-запросами в Delphi (см. статью Пример авторизации на сайте с помощью idHTTP.Post), то и пример возьму тот же, что и в той статье, а именно — авторизация в ЖЖ.

При организации POST-запроса достаточно будет добавить в свойства объекта curl параметр CURLOPT_POST, установленный в 1 (или true) и CURLOPT_POSTFIELDS, значением которого будет строка со значениями переменных в таком виде:

param1=value1&param2=value2&param3=value3&...&paramN=valueN


вторник, 22 сентября 2009 г.

Примеры применения CURL. Парсинг ключевых слов (буржунет)

Приведу пример парсинга на php. С предыдущими темами пост будет связан способом получения содержимого страницы, то бишь получать ее будем с использованием библиотеки CURL.

Сначала о том, что парсить. А будем парсить ключевики. Но не с гугля, нет. Поищем в интернете какой-нибудь сторонний сервис. Первое, что я нашла, это http://freekeywords.wordtracker.com/. Изучаем страницу. На ней форма. Заполняем, отправляем.


Экспериментируем с adult-фильтром.


Данные передаются GET-запросом, то есть вообще никаких премудростей — просто используем функцию получения контента из предыдущего поста, а потом регуляркой добываем нужные нам данные. Шаблон GET-запроса получаем, введя данные непосредственно в форму на сайте, установив нужное нам значение adult-фильтра и нажав на кнопку. У меня получился следующий шаблон (значение фильтра — по умолчанию):

$url = 'http://freekeywords.wordtracker.com/?seed='.$keyword.'&adult_filter=remove_offensive&suggest=Hit+Me';


(Вместо $keyword будем подставлять ключевик.)

Следует обратить внимание, что если в анализируемом нами ключевике несколько слов, разделенных пробелом, то пробел заменяется на "+".

Вот такой у нас получится скрипт (в результате все 100 ключевиков я просто выведу на экран, но можно их записать в файл и т.д.):

<?php
function get_web_page( $url )
{
$uagent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322)";

$ch = curl_init( $url );
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // возвращает веб-страницу
curl_setopt($ch, CURLOPT_HEADER, 0); // не возвращает заголовки
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); // переходит по редиректам
curl_setopt($ch, CURLOPT_ENCODING, ""); // обрабатывает все кодировки
curl_setopt($ch, CURLOPT_USERAGENT, $uagent); // useragent
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 120); // таймаут соединения
curl_setopt($ch, CURLOPT_TIMEOUT, 120); // таймаут ответа
curl_setopt($ch, CURLOPT_MAXREDIRS, 10); // останавливаться после 10-ого редиректа

$content = curl_exec( $ch );
$err = curl_errno( $ch );
$errmsg = curl_error( $ch );
$header = curl_getinfo( $ch );
curl_close( $ch );

$header['errno'] = $err;
$header['errmsg'] = $errmsg;
$header['content'] = $content;
return $header;
}

// ключевое слово
$keyword = 'finance';
// избавляемся от пробелов, если они есть
$keyword = strtr($keyword, ' ', '+');

$url = 'http://freekeywords.wordtracker.com/?seed='.$keyword.'&adult_filter=remove_offensive&suggest=Hit+Me';

$result = get_web_page( $url );
$err = 0;
if ( $result['errno'] != 0 )
{ //... ошибка: неправильный url, таймаут, зацикливание ... обработать по желанию
$err = 1;
}

if ( $result['http_code'] != 200 )
{ //... ошибка: нет страницы, нет прав ... обработать по желанию
$err = 1;
}

$page = $result['content'];

$a_pattern = '#<a\shref="(\?seed.*?)">(.*?)</a>#sm';
if (preg_match_all($a_pattern, $page,$a_matches, PREG_SET_ORDER))
{
foreach ($a_matches as $a)
echo $a[2].'<br>';
}
else echo 'Ничего не найдено!';
?>


Результат работы скрипта:


Если нам ключевиков надо не сто, а в разы больше, то придется модифицировать алгоритм для рекурсивного прохода по списку ключевиков, полученных на ранних этапах.

Зачем нам нужны эти ключевики? Применение можно найти. Об одном из способов применения расскажу в ближайшем посте.

Если вам понравилась статья, проголосуйте, пожалуйста, за нее на Sloger.net

Чтобы быть в курсе обновлений блога, можно подписаться на RSS.

Установка CURL на Denwer

CURLРаз уж решила здесь писать про CURL, то напишу и про установку. А конкретно — про установку на Denwer. В базовый пакет PHP, поставляемый с Denwer-ом, она не включена. Но это недоразумение легко устранить.

1) Cкачиваете пакет расширения "PHP5: дополнительные модули": http://www.denwer.ru/packages/php5.html
2) Устанавливаете его
3) Открываете в редакторе файл usr/local/php5/php.ini и снимаете комментарий со строчки:

;extension=php_curl.dll


4) Denwer Restart Servers

Вот и все. Чтобы убедиться, что все установилось нормально, можете проверить данные, сгенерированные функцией phpinfo(). Там должно быть cURL support enabled.

Чтобы быть в курсе обновлений блога, можно подписаться на RSS.

понедельник, 14 сентября 2009 г.

CURL. First steps

Как правило, изучение нового инструмента всегда откладывается: "Потом. Еще успеется. Надо собраться с мыслями и все такое". Именно так у меня когда-то откладывалось начало работы с библиотекой CURL (Client URL). Эта статья будет для новичков. Главная ее цель — показать, что ничего страшного здесь нет. И можно получить базовые представления за те 10 минут, которые уйдут на чтение статьи. Более того — вы сразу можете опробовать новые навыки в деле, используя листинги простейших функций, которые я буду приводить по мере раскрытия темы.

Прикинув приблизительный объем материала, я поняла, что в одну статью все не влезет, так что продолжение будет следовать :)

Для того, чтобы начать работать с библиотекой CURL, ее надо установить. Инструкций установки CURL в сети найти можно много, поэтому останавливаться на этом не буду.

Перейдем сразу к работе. Разберем простой пример использования библиотеки CURL для получения кода страницы. Этот пример вы можете часто встретить в листингах скриптов (я взяла его с какого-то форума).

function get_web_page( $url )
{
$uagent = "Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.0.8) Gecko/2009032609 Firefox/3.0.8";

$ch = curl_init( $url );

curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // возвращает веб-страницу
curl_setopt($ch, CURLOPT_HEADER, 0); // не возвращает заголовки
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); // переходит по редиректам
curl_setopt($ch, CURLOPT_ENCODING, ""); // обрабатывает все кодировки
curl_setopt($ch, CURLOPT_USERAGENT, $uagent); // useragent
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 120); // таймаут соединения
curl_setopt($ch, CURLOPT_TIMEOUT, 120); // таймаут ответа
curl_setopt($ch, CURLOPT_MAXREDIRS, 10); // останавливаться после 10-ого редиректа

$content = curl_exec( $ch );
$err = curl_errno( $ch );
$errmsg = curl_error( $ch );
$header = curl_getinfo( $ch );
curl_close( $ch );

$header['errno'] = $err;
$header['errmsg'] = $errmsg;
$header['content'] = $content;
return $header;
}


В эту функцию в качестве параметра передается URL, а возвращается ассоциативный массив, состоящий из заголовка и содержимого страницы. Функции CURL автоматически управляют редиректами, кукисами, декомпрессией файлов.

(Как хорошо, что в блоггере появилась простая возможность скрывать часть поста под кат! Сейчас, наконец, на главной не будет простыней листингов. А читателям, я думаю, будет не сложно один лишний раз кликнуть на "Читать далее")

Поделиться