Requisição API REST com método PATCH

REST

API

Delphi

HTTP

16/08/2022

Boa tarde,

Estou tentando implementar a baixa de boletos via a API SICOOB e na documentação informa que o método a ser usado é do tipo PATCH.

https://developers.sicoob.com.br/#!/apis

Verificando o componente RESTRequest estão disponíveis somentes os métodos DELETE, GET, POST E PUT.

Tentei fazer a requisição como POST ou PUT mas sem sucesso.

Alguém sabe como fazer a requisição usando este método PATCH?
Natanael Ferreira

Natanael Ferreira

Curtidas 0

Respostas

Natanael Ferreira

Natanael Ferreira

16/08/2022

Com base no link abaixo, consegui resolver usando o método TIdHTTP.DoRequest():

https://stackoverflow.com/questions/24556265/how-do-i-make-a-http-patch-request-in-delphi

Exemplo:

type
  TIdHTTPAccess = class(TIdHTTP);


var
  URLs: string;
  lHTTP: TIdHTTP;
  IdSSLIOHandlerSocketOpenSSL: TIdSSLIOHandlerSocketOpenSSL;
  AccessToken: string;
  JsonToSend: TStringStream;
  JsonRetorno: TMemoryStream;
begin
	 URLs := 'https://sandbox.sicoob.com.br/cobranca-bancaria/v1/boletos/baixa';

	with lHTTP do
	begin
	  lHTTP := TIdHTTP.Create(nil);
	  IdSSLIOHandlerSocketOpenSSL := TIdSSLIOHandlerSocketOpenSSL.Create(nil);
	  try
		try
		  IOHandler := IdSSLIOHandlerSocketOpenSSL;

		  Request.UserAgent := 'insomnia/2022.3.0';

		  HandleRedirects := True;

		  Request.CustomHeaders.Clear;
		  Request.CustomHeaders.AddValue('Content-type', 'application/json');
		  Request.CustomHeaders.AddValue('client_id', 'P1tC66e78hb2NN9CohJXoLMoV44a');
		  Request.CustomHeaders.AddValue('Authorization', 'Bearer ' + AccessToken);

		  Request.CharSet := 'utf-8';

		  Request.Host := URLs;        

		  JsonToSend := TStringStream.Create(memBaixa.Text, TEncoding.UTF8);
		  JsonRetorno := TMemoryStream.Create;
		  try
			TIdHTTPAccess(lHTTP).DoRequest('PATCH', URLs, JsonToSend, JsonRetorno, []);
			JsonRetorno.Position := 0;
			Json := ReadStringAsCharset(JsonRetorno, TIdHTTPAccess(lHTTP).ResponseCharset{$IFDEF STRING_IS_ANSI},
			  ADestEncoding{$ENDIF});
		  finally
			JsonRetorno.Free;
			JsonToSend.Free;
		  end;	

		  if ResponseCode = 207 then
			Application.MessageBox('Baixa efetuada com sucesso.', 'Informação', MB_OK + MB_ICONINFORMATION)
		  else
			Application.MessageBox('Falha ao baixar boleto', 'Aviso', MB_OK + MB_ICONWARNING);              
		except
		  on E: Exception do
			 Application.MessageBox(PChar(Concat('Falha ao baixar boleto.', sLineBreak, sLineBreak,
				ResponseCode.ToString(), ' - ', E.Message)), 'Aviso', MB_OK + MB_ICONWARNING)
		end;
	  finally
		lHTTP.Free;
		IdSSLIOHandlerSocketOpenSSL.Free;
	  end;
end;
GOSTEI 0
POSTAR