Alex2013 писал(а):Проблема ssl ? ssleay32.dll и libeay32.dll доступны ? ( и актуальных версий )
Synapse использует OpenSSL, и компилировать его (synapse) в свой проект, нужно с поддержкой конкретной версии, по умолчанию там версия 1.0, с которой уже ни куда не законнектишься, для примера у меня используется OpenSSL 1.1, под windows это будут 2 либы, можно скачать инсталлятор с официального сайта и установить всё в системный каталог, но япредпочитаю таскать либы с собой без установок:
libssl-1_1-x64.dll
libcrypto-1_1-x64.dll
По линуксом соответственно в системном каталоге библиотеки с именами по умолчнию, устанавливаются из репозитория при установке OpenSSL 1.1 штатными средствами:
libssl.so.1.1
libcrypto.so.1.1
пробовал использовать synapse с OpenSSL 3, откатился обратно, не везде поддерживается.
Для использования нужной версии в своем проекте просто добавьте в раздел uses:
- Код: Выделить всё
uses httpsend, FileUtil, ftpsend, pop3send, mimemess, mimepart,
synachar, imapsend, dpEvnthadlrs, synaser, Forms, LazUTF8,
ssl_openssl11, ssl_openssl11_lib;
Эти файлы: ssl_openssl11, ssl_openssl11_lib поставляются с исходниками Synapse, соответственно если нужно добавить поддержку OpenSSL 3, то файлы нужно будет заменить на ssl_openssl3, ssl_openssl3_lib.
Если дело в ssl, то скорее всего вы бы не смогли сам запрос выполнить, если запрос выполняется, то дело не в ssl.
Ниже вытащил пример нормализации адреса через dadata из своего рабочего проекта c использованием Synapse, но код на Дизель-Паскале.
- Код: Выделить всё
method TNormalAdres.ExecNormalDadata(Adres, Token, Key: string): Boolean;
var
HTTP: THTTPSend;
//SL: TStringList;
Arr: TJSONArray;
Parser: TJSONParser;
OBJ: TJSONObject;
begin
Result = False;
Clear;
Checked = False;
qc_complete = -1;
qc_house = -1;
qc = -1;
URL = 'https://cleaner.dadata.ru/api/v1/clean/address';
HTTP = THTTPSend.Create;
Arr = TJSONArray.Create;
try
Arr.AddStr(Adres);
Request.Text = Arr.AsJSON;
//AddInfoText(SL.Text);
//AddInfoText('Отправка запроса');
HTTP.Headers.Clear;
HTTP.MimeType = 'application/json';
HTTP.Headers.Add('Content-Type: application/json');
HTTP.Headers.Add('Accept: application/json');
HTTP.Headers.Add('Authorization: Token ' + Token);
HTTP.Headers.Add('X-Secret: ' + Key);
Request.SaveToStream(HTTP.Document);
HTTP.Document.Seek(0, soBeginning);
HTTP.HTTPMethod('POST', URL);
if HTTP.ResultCode = 200 then
HTTP.Document.Seek(0, soBeginning);
Respons.LoadFromStream(HTTP.Document);
OBJ = nil;
Parser = TJSONParser.Create(Respons.Text);
try
Arr.Free;
Arr = nil;
Arr = Parser.Parse As TJSONArray;
OBJ = Arr.Objects[0];
qc_complete = OBJ.Integers['qc_complete'];
qc_house = OBJ.Integers['qc_house'];
qc = OBJ.Integers['qc'];
qc_geo = OBJ.Integers['qc_geo'];
if not OBJ.Nulls['postal_code'] then
PIndex = OBJ.Strings['postal_code'];
end;
if not OBJ.Nulls['region_with_type'] then
FRegion = OBJ.Strings['region_with_type'];
end;
if not OBJ.Nulls['area_with_type'] then
FArea = OBJ.Strings['area_with_type'];
end;
if not OBJ.Nulls['city'] then
FPlase = OBJ.Strings['city'] + ' ' + OBJ.Strings['city_type'];
PlaceGuid = OBJ.Strings['city_fias_id'];
end;
if not OBJ.Nulls['settlement'] then
FLocation = OBJ.Strings['settlement'] + ' ' + OBJ.Strings['settlement_type'];
if PlaceGuid = '' then
PlaceGuid = OBJ.Strings['settlement_fias_id'];
end;
if FPlase = '' then
FPlase = FLocation;
FLocation = '';
end;
end;
if not OBJ.Nulls['street'] then
FStreet = OBJ.Strings['street'] + ' ' + OBJ.Strings['street_type'];
end;
if not OBJ.Nulls['house'] then
FHouse = OBJ.Strings['house'];
end;
if not OBJ.Nulls['block'] then
FCorpus = OBJ.Strings['block'];
end;
if not OBJ.Nulls['flat'] then
FRoom = OBJ.Strings['flat'];
end;
if not OBJ.Nulls['postal_box'] then
AdresTypeID = 1;
AdresType = 'PO_BOX';
FNumAdresType = OBJ.Strings['postal_box'];
end;
case qc of
1:
begin
Err = 'Остались лишние части';
if not OBJ.Nulls['unparsed_parts'] then
Err = Err + ''#13#10;
UnparsedParts = OBJ.Strings['unparsed_parts'];
Err = Err + UnparsedParts;
Err = Err + ''#13#10;
end;
end;
2: Err = 'Адрес пустой или заведомо мусорный или недостаточно данных для разбора';
3: Err = 'Есть альтернативные варианты адреса';
end;
case qc_complete of
0: begin
Checked = True;
Result = True;
end;
1: Err += 'Нет региона';
2: Err += 'Нет города';
3: Err += 'Нет улицы';
4: Err += 'Нет дома';
5: Err += 'Под вопросом. Нет квартиры. Подходит для юридических лиц или частных владений';
6: Err += 'Адрес неполный';
7: Err += 'Иностранный адрес';
8: Err += 'Под вопросом. До почтового отделения — абонентский ящик или адрес до востребования. Подходит для писем, но не для курьерской доставки.';
9: Err += 'Под вопросом. Нет уверенности в правильном распознавании адреса';
10: Err += 'Под вопросом. Дома нет в ФИАС';
else
Err += 'Адрес не распознан';
end;
if qc_complete > 0 then
if qc_house <> 2 then
if Err <> '' then Err = Err + ''#13#10 end;
Err = Err + 'Дом не найден в фиас';
if qc_geo = 0 then
Err = Err + ' но найден на картах'
elseif qc_geo = 1 then
Err = Err + ' но найден похожий на картах'
elseif qc_geo >= 2 then
Err = Err + ' и не найден на картах';
end;
end;
end;
//AddInfoText(OBJ.FormatJSON);
finally
Parser.Free;
end;
else
AddInfoText(IntToStr(HTTP.ResultCode) + ', ' + HTTP.ResultString);
AddInfoText(Respons.Text);
end;
finally
Arr.Free;
HTTP.Free;
end;
end;