delphi 7 indy 9 error connecting with ssl

05/05/2020

0


Galera to estou tento um problema e é algo bem urgente se conseguirem dar uma luz.

Estou tendo um problema ao tentar pegar informaçoes de uma api pra jogar pra dentro de um form meu. Antes funcionava, mas qnd mudou o endereço pra https parou

AChei muitas rotinas mas nenhuma conseguiu resolver diretamente o problema. Eu tbm baixei varias dlls "libeay32.dll" "ssleay32.dll" testando mas nao funcionou
Obs: Delphi 7 e utilizo o Indy 9 mas não posso simplesmente atualizar pro 10 e talvez resolver a situação dessa forma.

O esquema onde faço essa chamada esta abaixo
uses
Dialogs, uJson, IdHTTP, IdSSLOpenSSL;

//endereço
const
{ ENDPOINT = ''http://iws.ibpt.org.br/api/deolhonoimposto/Produtos'';
TOKEN = ''osADu_Y8JzfDPALqRv2X_Q2uRgd9OrDiKxGT3OfUFEamQkkBoNv26ZXjnh6psG7lr'';
CNPJ = ''10500741000151'';
DEFCLAFIS = ''61052000''; }

ENDPOINT = ''https://apidoni.ibpt.org.br/api/v1/produtos'';
TOKEN = ''osADu_Y8JzfDPALqRv2X_Q2uRgd9OrDiKxGT3OfUFEamQkkBoNv26ZXjnh6psG7lr'';
CNPJ = ''10500741000151'';
DEFCLAFIS = ''61052000'';

//Rotina
constructor TOlhoImposto.create;
begin
http := TIdHTTP.Create(nil) ;
end;

destructor TOlhoImposto.Destroy;
begin
if Assigned(http) then
FreeAndNil(http);
inherited Destroy;
end;

procedure TOlhoImposto.getAliquota(clafis, uf: string);
var
jObj: TJSONObject;
sRetorno,
url : string;
fIdSSLIOHandlerSocket: TIdSSLIOHandlerSocket;
begin
url := ENDPOINT +
''&codigo='' + clafis +
''&uf='' + uf +
''&ex=0'' +
''&codigoInterno=0'' +
''&descricao=0'' +
''&unidadeMedida=0'' +
''&valor=0'' +
''>in=0'';

try

newInstance();
//metodo antigo
// sRetorno := Sistema.getRequestHTTP(url);
// http.ReadTimeout := 5000;
// http.Request.UserAgent := '''';
// url :=''https://www.devmedia.com.br/'';

fIdSSLIOHandlerSocket := TIdSSLIOHandlerSocket.Create(nil);
HTTP.IOHandler := fIdSSLIOHandlerSocket;
fIdSSLIOHandlerSocket.SSLOptions.Method := sslvSSLv23;
fIdSSLIOHandlerSocket.SSLOptions.Mode := sslmClient;
HTTP.HandleRedirects := True;
HTTP.Request.Method := hmPost;
HTTP.Request.ContentType := ''application/json'';
HTTP.Request.ContentEncoding := ''utf-8'';
sRetorno := http.Get(url);

jObj := TJSONObject.Create(sRetorno);
Chave := jObj.getString(''Chave'');
Classificacao := jObj.getString(''Codigo'');
Descricao := jObj.getString(''Descricao'');
EX := jObj.getString(''EX'');
Estadual := jObj.getDouble(''Estadual'');
Fonte := jObj.getString(''Fonte'');
Importado := jObj.getDouble(''Importado'');
Municipal := jObj.getDouble(''Municipal'');
Nacional := jObj.getDouble(''Nacional'');
Tipo := jObj.getString(''Tipo'');
UF := jObj.getString(''UF'');
Valor := jObj.getString(''Valor'');
ValorTributoEstadual := jObj.getString(''ValorTributoEstadual'');
ValorTributoImportado := jObj.getString(''ValorTributoImportado'');
ValorTributoMunicipal := jObj.getString(''ValorTributoMunicipal'');
ValorTributoNacional := jObj.getString(''ValorTributoNacional'');
Versao := jObj.getString(''Versao'');
VigenciaFim := jObj.getString(''VigenciaFim'');
VigenciaInicio := jObj.getString(''VigenciaInicio'');
jObj.Free;
except
//newInstance();

end;
end;

Tentei com outros endereços tbm, mas mesmo assim não consegui.
Felipe

Felipe

Responder

Posts

08/05/2020

Guilherme Wiethaus

Bem, acho que não posso diretamente lhe ajudar. Mas talvez lhe sirva como uma luz. antigamente eu usava o SSL porém tinha problemas com ele em relação a versão do libeay32.dll e ssleay32.dll com a versão do indy que fazia uso deste. tinha que remover todas as versões erradas dentro do diretorio do windows e do meu projeto até acertar a versão correta. Não creio que o problema seja só porque mudou de protocolo de http para https. O SSL deveria dar conta do recado. Atualmente meso para Delphi 7 tem a versão nova do Indy 10 que podes baixar e instalar e acho que deve ter compatibilidade para Delphi 7.

Eu ví que que você está tentado fazer baixar as informações dos impostos no IBPT. eu utilizo o ACBr para a tarefa e funciona perfeitamente para mim. Se pensar em mudar para ACBr veja antes a solução de seu problema, não fique pulando de galho em galho pelas maneiras mais fáceis sem descobrir o que ocorre antes, a não ser que você tem prazo para entrega de algum projeto. No componente ACBr têm dentro dele exemplos de como fazer isto. Muito fácil. Eu implementei junto com thread para ficar mais fluido.

Tenho certeza que não ajudei muito no seu problema, mas serve ai como outras alternativas.
Responder

Que tal ter acesso a um e-book gratuito que vai te ajudar muito nesse momento decisivo?

Ver ebook

Recomendado pra quem ainda não iniciou o estudos.

Eu quero
Ver ebook

Recomendado para quem está passando por dificuldades nessa etapa inicial

Eu quero

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar