уважаемые посетители блога, если Вам понравилась, то, пожалуйста, помогите автору с лечением. Подробности тут.

Как нетрудно заметить по моим постам в блоге, при работе с HTTP-протоколом в Delphi я отдаю предпочтение библиотеке Synapse. Так уж получилось, что эта библиотека стала для меня практически незаменимой в момент, когда было необходимо написать небольшое приложение в Lazarus для работы в Сети, да так и привык к работе с ней, что не смог отказаться от её использования даже по возвращении в Delphi 2010, а потом и Delphi XE (частично). И с течением времени в блоге стали появляться посты по работе с библиотекой, а вместе с постами – вопросы, на которые я так или иначе пробовал отвечать как в блоге, так и по электронной почте, аське и т.д. Накопился кое-какой багаж вопросов, на которые ответил уже не один раз и решал сделать небольшой такой ТОП-10 вопросов по работе с Synapse в Delphi и ответов на них.

Вопрос 1: Как работать с TMemoryStream, TStringist и т.д.?

Ответ: почитать документацию Delphi на соответствующие темы. Изучением работы с этими типами данных необходимо заниматься задолго ДО начала работы с Synapse.

Вопрос 2: Как получить все cookies, полученные от сервера?

Ответ: для хранения cookies, полученных от сервера необходимо воспользоваться свойством THTTPSend:

Cookies: TStringList

Вопрос 3: Отправляю повторный запрос на сервер и не получаю ответа. Как быть?

Ответ: Метод HTTPMethod не стирает полученные в предыдущем запросе заголовки (свойство Headers), куки (свойство Cookies) и тело запроса (свойство Document), а использует их для отправки на заданный URL. Для того, чтобы повторный запрос выполнился успешно, необходимо удалить все записи из Headers, Cookies и Document, полученные первым запросом и, при необходимости заполнить их данными, которые необходимо отправить на сервер.

Вопрос 4: Как получить размер файла, который необходимо скачать из Сети?

Ответ: необходимо отправить HEAD-запрос на URL и, в случае успешно выполненного запроса, получить значение заголовка “Content-Length” из свойства Headers: TStringList, либо для Delphi 2010/Delphi XE воспользоваться хэлпером.

Вопрос 5: Как указать в заголовках размер отправляемого на сайт файла?

Ответ: никак. При выполнении HTTPMethod заголовок Content-Length заполнится автоматически, на основании данны, записанных в теле запроса (свойство Document: TMemoryStream).

Вопрос 6: Отправляю POST-запрос на сервер и не получаю ответа, либо возвращается код 4хх. Что я делаю не так?

Ответ: самая распространенная ошибка при отправке POST – неправильно заполненный заголовок Content-Type. По умолчанию этот заголовок имеет значение text/html. Для смены значения заголовка необходимо воспользоваться свойством MimeType: string, например так:

...
var HTTP: THTTPSend;
begin
...
  HTTP:=THTTPSend.Create;
  HTTP.MimeType:='application/x-www-form-urlencoded';
  if HTTP.HTTPMethod('POST','http://webdelphi.ru') then
    ...
end;

Вопрос 7: Сервер просит, чтобы присылаемые данные были закодированы, а в THTTPSend нет никаких методов кодирования. Как быть?

Ответ: Для всех видов кодирования/декодирования данных в Synapse используется модуль synacode.pas. Подключите его в uses и получит в распоряжение все необходимые методы, в т.ч. EncodeURL и EncodeURLElement для кодирования URL и его отдельных частей.

Вопрос 8: Загружаю данные web-странички в Memo а там вместо русских букв кракозябры. Synapse глючит?

Ответ: Synapse не глючит, а возвращает то, что попросили. Для того, чтобы текст в Memo стал читабельным необходимо исправить его кодировку. Подробное описание способов работы с кодировками есть здесь.

Вопрос 9: Как сделать визуализацию скачивания/закачки больших файлов?

Ответ: для этого необходимо обработать событие соккета OnStatus. Пример реализации скачивания файла с ProgressBar’ом есть здесь. Про другие события можно прочитать здесь.

Вопрос 10: Как работать с HTTPS в Synapse?

Для работы с HTTPS в Synapse необходимо подключить в uses модуль ssl_openssl.pas. При этом в папке с проектом необходимо держать следующие DLL: libeay32.dll, ssleay32.dll. Скачать последние версии библиотек можно здесь. Более подробную информацию по работе модуля ssl_openssl можно получить здесь.

Вот в принципе тот ТОП-10 вопросов, которые так или иначе задаются мне по работе с Synapse. Есть, конечно, и более сложные и интересные, но таковых не так уж и много и обычно для ответа на них пишется отдельный пост.

Книжная полка

Описание: Рассмотрены практические вопросы по разработке клиент-серверных приложений в среде Delphi 7 и Delphi 2005 с использованием СУБД MS SQL Server 2000, InterBase и Firebird. Приведена информация о теории построения реляционных баз данных и языке SQL. Освещены вопросы эксплуатации и администрирования СУБД.
купить книгу delphi на ЛитРес
Описание: Рассмотрены малоосвещенные вопросы программирования в Delphi. Описаны методы интеграции VCL и API. Показаны внутренние механизмы VCL и приведены примеры вмешательства в эти механизмы. Рассмотрено использование сокетов в Delphi: различные режимы их работы, особенности для протоколов TCP и UDP и др.
купить книгу delphi на ЛитРес
0 0 голоса
Рейтинг статьи
уважаемые посетители блога, если Вам понравилась, то, пожалуйста, помогите автору с лечением. Подробности тут.
Подписаться
Уведомить о
9 Комментарий
Межтекстовые Отзывы
Посмотреть все комментарии
Oleg
Oleg
09/10/2010 14:31

А почему на Lazarus-e была необходимость, чем Delphi не подходила?

Basmach
Basmach
11/10/2010 15:23

Здравствуйте!
Я новый человек в программирование (раньше работал на ехселе и писал макросы). Захотелось проверить свои силы на «Большое» программирование. Выбрал дельфи. Ищу всякие учебники, хельпи про него и по тихонько изучаю. В этом Ваш блог хорошо помогает. Я здесь узнал про библиотеке
Synapse решил изучать и его. Вроде понятно. Но вчера меня попросили написать простой прокси. И… Я узнал, что не могу понять как это делается… :(  Скачал с инета несколько примеров но конкретно про прокси не нашел. В документации сказано, что надо заполнить свойтва HTTPTunnelIP.  Я не понял когда его задать… Если у Вас будет время можете подсказать?

Александр
03/01/2011 05:09

ПОДСКАЖИТЕ КАК ПРОЙТИ АВТОРИЗАЦИЮ С СЕРТИФИКАТОМ

Торерро
Торерро
14/02/2011 23:03

Vlad подскажи а как сделать гет запрос, но оборвать прием данных а принять только хедеры(экономия трафа повышение скорости работы)? метод HEAD не всегда подходит некоторые сайты при этом дают не тот ответ который при GET.

Торерро
Торерро
14/02/2011 23:06

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

Торерро
Торерро
15/02/2011 18:45

Vlad чуть чуть подробней можно — натолкни пожалуйста на мысль как это сделать.