В разное время, в разных ситуациях я освещал в блоге работу с только с одним или несколькими свойствами THTTPSend, избегая при этом рассмотрения работы класса в целом. Но теперь, когда рассмотрены практически все доступные свойства класса, когда приведены необходимые примеры работы, например с теми же proxy или gzip в Synapse, думаю, что не плохо было бы свести всю эту информацию в один большой объединяющий пост. Лишним такая информация явно не будет, тем более, что Вы сможете в любое время сохранить эту статью в pdf и получить небольшой оффлайн-справочник по работе с HTTP в Synapse.
Наши проекты
Delphi+Google
Chrono
ODFProc
Поддержка блога
А тут я коплю на лицензию Delphi XE на iPad =).
Сумма пожертвования не фиксирована.
Публикации
Год назад
Случайный пост
Последние
Сообщения форума
Комментарии
Опрос
Список публикаций с меткой: Synapse
Статьи, помеченные тегом Synapse посвящены работе с библиотекой Synapse в Delphi любой версии.
Synapse - это кроссплатформенная бесплатная библиотека с открытым исходным кодом для работы с Сетью.
Synapse поддерживает работы с большим количеством сетевых протоколов (HTTP, FTP, Telnet и т.д.) и позволяет создавать полноценные приложения для работы с Сетью с минимальными затратами времени. Библиотека представляет собой набор взаимосвязанных модулей, каждый из которых содержит классы и методы для работы с определенным протоколом передачи данных или вспомогательные методы.
Также, статьи, посвященные работе с библиотекой Synapse Вы можете найти по меткам: THTTPSend, HTTP proxy, proxy, SOCKS proxy, ftp, TFTPSend, smtp
Как быстро пролетела первая неделя отпуска :). Последние три дня так вообще махом потому как довольно плотно “завис” над API Google Docs и обновлениями в блоге. Ну, с обновлениями познакомлю всех немного позже, как только все эти обновы заработают в полную силу, а пока по теме поста.
Итак, сам по себе API Google Docs (он же API списка документов Google) по сложности не отличается от многих других API Google – те же данные в формате XML, те же GET, POST, PUT-запросы, однако серьезные различия есть в объемах перекачиваемых данных. Одно дело, когда мы качаем из Сети XML-файл размером в 200-300 Кб, а другое – когда вместе с этими данными нам надо получить файл или наоборот – забросить в аккаунт файл объемом, скажем, в несколько мегабайт. А если канал слабый? А ну как “заглючит” чего-нибудь в момент аплоада? Подводных камней достаточно и надо их как-то обходить, искать решения. А с последним обновлениям сервиса так вообще все пользователи получили возможность закачивать в аккаунт файлы любых форматов. Благо разработчики API предусмотрели такую замечательную возможность как возобновляемые загрузки (resumable upload). Вот над этой возможностью я и работал последние три дня. Причем пришлось реализовывать работу сразу с двумя библиотеками – Indy и Synapse.
Раз пошла такая тема, то сегодня речь пойдет про ещё один способ экономии трафика и повышении скорости работы с HTTP при использовании Synapse в Delphi. О том, как сэкономить немного трафика при скачивании web-страничек из Сети я рассказывал, когда рассматривал события сокета в Synapse, но этот способ выгодно применять кода необходимые нам данные находятся как можно ближе к началу страницы – тогда экономия есть и прирост скорости работы тоже наблюдается. Но использование события сокета не дает никакого эффекта, когда надо скачать страницу целиком. И в этом случае на помощь нам приходит использование GZip. При использовании GZip с Synapse мы имеем возможность сэкономить до 75% и более трафика, а соответственно и значительно ускорить работу наших программ для работы с Сетью.
Прежде, чем перейдем к рассмотрению примеров использования GZip в Synapse, рассмотрим несколько общих моментов по использованию сжатия в принципе.
В большинстве случаев, при рассмотрении в блоге вопросов использования библиотеки Synapse, а именно при работе с THTTPSend я ограничивался тем, что рассказывал как получать какие-либо данные из Сети, например, текст страницы или, на крайний случай, правильно работать с веб-формами, когда надо было залогинится на сайте или отправить на сервер какой-нибудь текст. Но между тем, иногда может потребоваться и отправка более “весомых” данных, чем простой текст, например, загрузить картинку на фотохостинг.
В качестве примера рассмотрим работу с сайтом imagevenue.com.
Давненько собирался разобраться с тем как использовать разные прокси в Synapse, но всё как-то не подворачивалась задача для применения проксей на практике, потом вроде бы подвернулась тема - времени не было, появилось время - решил отдохнуть, в результате вместо программирования уткнулся в пост про 5 типов женщин - любят ученые и исследователи типизировать то, что не типизируется в принципе. Потратил на блог кучу времени. В итоге сегодня решил забросить все , не относящееся к программированию и заняться проксями в Synapse.
Подвернулась как раз необходимая задачка. Суть которой заключается в том, чтобы парсить большое количество страниц с Яндекс и Гугл (не только для проверки нахождения страницы в индексе). Как известно, при очень частом обращении с одного IP-адреса Яндекс может наказать “злоумышленника” показав вместо страницы с информацией фигушку каптчу. Решением для небольших програмок-парсилок может быть банальная задержка в несколько секунд между запросами. Однако, когда количество запросов переваливает, скажем за 1000 задержка может выйти боком для пользователя, т.к. отрабатывать программка будет очень уж долго. Решением проблемы является использование прокси и библиотека Synapse дает нам возможность использовать как HTTP так и SOCKS4 и SOCKS5 прокси.
Оказывается Google открыл в своей лаборатории ещё два API: Tasks API (управление списками задач) и API для оптимизаторов – Online Page Speed.
Что касается первого API, то для Delphi он пока без вариантов, т.к. в работе надо использовать на выбор одну из трех библиотек – Java, Python или PHP (по-моему первый API гугла. где можно использовать PHP прямо “из коробки”). Можно было бы поторчать немного и портировать одну из библиотечек под Delphi, но весна->сессия->заморочки. Поэтому решил пока посмотреть второй API. Жаль конечно, что нельзя использовать IP*Works для работы с API (у меня только базовый вариант без SSL) так бы можно было глянуть работу с JSON.
В статье “Частичное скачивание web-странички с помощью Synapse” я рассказывал о том, как можно использовать событие сокета OnReadFilter для фильтрации трафика и частичного скачивания странички сайта. Способ достаточно прост, но наравне с простотой имеется также и ряд недостатков о которых я упомянул в конце статьи. Сегодня рассмотрим способы частичного скачивания файлов любого типа. Вы множество раз сталкивались с таким способом скачивания, используя тот же ReGet – когда весь объем файла разбивается на несколько секций и в многопоточном режиме выкачивается с сервера.
У THTTPSend в Synapse есть два свойства в которых можно задавать начало и окончание диапазона данных, которые необходимо получить от сервера, однако есть несколько моментов, которые следует рассмотреть прежде, чем начинать активно использовать байтовые диапазоны в Synapse.
Если предыдущий пост предназначался исключительно для пользователей программы “Пинговалка”, то этот – для разработчиков. Сегодня будем разбираться с sitemap.xml.
В целом sitemap может пригодится для чего угодно, начиная от того, чтобы просто получить список всех страниц, так и, например, для того, чтобы по полученному списку в дальнейшем спарсить названия страниц, проверить индексацию в поисковиках и т.д. Зная путь к sitemap, можно сэкономить достаточно много времени на получение необходимой информации по сайту.
Как и сказано в заголовке поста – использовать будем две бесплатные, кроссплатформенные библиотеки – Synapse и NativeXML.
Интернет бурлит сообщениями про землетрясения в Японии, кое-где обсуждаются итоги выборов-2011 в регионах, ну а у меня блог про Delphi :). И сегодня я решил заняться немного практической стороной – не рассматривать возможности библиотек, а применить их на практике. Самое простое, что пришло в голову – написать небольшую программку по проверке странички в индексе Google. Конечно, есть сервис для веб-мастера от того же самого Google где можно эту информацию посмотреть. Однако небольшое исследование “интернетов” показало, что подобный софт всё ещё пользуется успехом у оптимизаторов. Опять же есть пара идей на будущее, но об этом я пока умолчу (кто его знает, что случится завтра?) – будет время расскажу и, возможно, даже покажу.
Так вот. Года этак полтора назад я рассказывал о том, как проверить наличие страниц сайта в Яндекс. Скажем так, представленный в том посте способ не отличается стабильностью и универсальностью :) Смысл работы был следующим – составляем правильный запрос, скачиваем страницу и парсим-парсим-парсим. Все бы хорошо, но добрый Яндекс периодически отправляет программку на страничку с каптчей и надо все время держать в уме как минимум возможность установки достаточной задержки между запросами, либо использовать кучу проксей, или, как я недавно рассказывал – юзать сервисы, использующие Яндекс.XML.
C Google в этом отношении все намного проще и удобнее – есть нормальный Search API. А где есть API – там есть и то, что нам необходимо. Все, что необходимо – правильно его (API) использовать, чтобы:
- Затратить как можно меньше трафика (несмотря на то, что безлимит рулит);
- Получить сведения о том, проиндексирована страница или нет;
Вот этим мы сегодня и займемся.
Вчера мы рассмотрели небольшой пример того, как можно подключиться к FTP-серверу и скачать/загрузить файл. Однако сам по себе TFTPSend имеет ещё ряд отличий от уже известного нам класса THTTPSend (ну оно и понятно – протоколы-то разные). В частности, если Вы помните то, что я рассказывал про события в THTTPSend, то знаете, что все обработчики событий устанавливаются через его свойство Sock, которое дает доступ к объекту сокета.
В описании TFTPSend Вы можете обнаружить не только собственное событие OnStatus, которое отличается от уже известного нам, но также и сразу 2 свойства для доступа к двум разным сокетам – Sock и DSock.
У того, кто до этого момента не имел дел с работой FTP может возникнуть резонный вопрос: зачем два свойства, через которые можно определить идентичные события? И второй вопрос: когда следует использовать уже определенное в TFTPSend событие OnStatus.
Ответы на эти вопросы и будут рассмотрены в сегодняшнем посте.









Свежие комментарии