Membros Pro AG Sistemas Posted July 3 Membros Pro Share Posted July 3 boa tarde! Desculpa incomodar é um tema fora do portal mas estou precisando enviar um arquivo pdf por PUT. Pelo postman eu consigo enviar mas quando tento montar o envio pelo delphi o arquivo vai vazio Estou add o arquivo este modo TempStream := TMemoryStream.Create; TempStream.LoadFromFile(sBodyArquivo); restRequest.AddBody(TempStream,ctAPPLICATION_PDF); -- Pelo postman funciona curl --location --request PUT 'https://URL' \ --header 'Content-Type: application/pdf' \ --data '@/C:/Users/Downloads/Teste de documento a assinar.pdf' -- Do modo que eu fiz ele envia o arquivo mas ele fica vazio mas quando manda pelo postman da certo. eu tentei enviar o arquivo por form-data mas o serviço não aceita. try restClient := TRESTClient.Create(nil); restRequest := TRESTRequest.Create(restClient); restResponse := TRESTResponse.Create(restClient); try restClient.BaseURL := pUrl; restRequest.Client := restClient; restRequest.Method := pTPMetodo; restRequest.Resource := ''; restRequest.Response := restResponse; if iTimeOut > 0 then begin restRequest.Timeout := iTimeOut; end; iParametro := 0; restRequest.Params.Add; if pContentType = '' then restRequest.Params[iParametro].ContentType := ctNone else restRequest.Params[iParametro].ContentType := pContentType; if pTokem <> '' then begin restRequest.Params[iParametro].Kind := pkHTTPHEADER; restRequest.Params[iParametro].name := 'Authorization'; restRequest.Params[iParametro].Value := pTokem; restRequest.Params[iParametro].Options := [poDoNotEncode]; end; if pStringList <> nil then begin for I := 0 to pStringList.count -1 do begin sNome := copy(pStringList[i],1,pos('|',pStringList[i])-1); sValor:= copy(pStringList[i],pos('|',pStringList[i])+1,length(pStringList[i])); inc(iParametro); restRequest.Params.Add; restRequest.Params[iParametro].ContentType := ctNone; restRequest.Params[iParametro].Kind := pkGETorPOST; restRequest.Params[iParametro].name := sNome; restRequest.Params[iParametro].Value := sValor; restRequest.Params[iParametro].Options := [poDoNotEncode]; end; end; if pParamHeader <> '' then begin inc(iParametro); restRequest.Params.Add; restRequest.Params[iParametro].ContentType := ctNone; restRequest.Params[iParametro].Kind := pkGETorPOST; restRequest.Params[iParametro].Options := [poDoNotEncode]; restRequest.Params[iParametro].name := pParamHeader; restRequest.Params[iParametro].Value := pParamHeaderValor; end; TempStream := TMemoryStream.Create; TempStream.LoadFromFile(sBodyArquivo); restRequest.AddBody(TempStream,ctAPPLICATION_PDF); if trim(pContentType) <> '' then begin inc(iParametro); restRequest.Params.Add; restRequest.Params[iParametro].ContentType := pContentType;//ctAPPLICATION_XML; restRequest.Params[iParametro].Kind := pkGETorPOST; restRequest.Params[iParametro].Options := [poDoNotEncode]; restRequest.Params[iParametro].name := 'Content-Type'; restRequest.Params[iParametro].Value := pContentType; end; restRequest.Execute; if (restRequest.Response.StatusCode = 200) then begin result := 'OK'; end else result := 'Erro'; except result := ''; end; finally FreeAndNil(restClient); end; desde ja agradeço caso alguem saiba como resolver Link to comment Share on other sites More sharing options...
Fundadores Daniel Simoes Posted July 3 Fundadores Share Posted July 3 @Juliomar Marchetti, tem algum link de exemplo em Horse ? Daniel Simões de Almeida O melhor TEF, é com o Projeto ACBr - Clique e Conheça Ajude o Projeto ACBr crescer - Assine o SAC (15) 2105-0750 (15)99790-2976. Link to comment Share on other sites More sharing options...
Membros Pro AG Sistemas Posted July 4 Author Membros Pro Share Posted July 4 boa tarde caso tenha algum exemplo fico no aguardo Link to comment Share on other sites More sharing options...
Moderadores Juliomar Marchetti Posted July 5 Moderadores Share Posted July 5 vou providenciar. mas lembrando o horse é para servidor o que tu quer é consumir a API e não criar uma então está no caminho certo ou TRestClient ou usar o TNetHttpClient Qual versão do delphi está usando? Juliomar Marchetti skype: juliomar telegram: juliomar e-mail: [email protected] http://www.juliomarmarchetti.com.br Link to comment Share on other sites More sharing options...
Membros Pro AG Sistemas Posted July 5 Author Membros Pro Share Posted July 5 bom dia! É isso mesmo eu preciso consumir a api do servidor. Tentei enviar pelo restclient mas o arquivo chega corrompido function TApiAssinatura.ConsomeAPIArquivoteste(pTokem,pUrl :String; pTPMetodo :TRESTRequestMethod;pParamHeader:String = '';pParamHeaderValor:String=''; pParamBody:String = ''; pStringList:TStringList=nil; iTimeOut:Integer= 0;sListaBody:TStringList=nil; pContentType:String=''; sBodyArquivo:string=''):string; var restClient: TRESTClient; restRequest: TRESTRequest; restResponse: TRESTResponse; sErro, sNome, sValor :String; iParametro :Integer; I: Integer; TempStream : TMemoryStream; tFStream: TFileStream; sStream : TStream; sLista : tstringlist; sTeste : String; ABytes: TBytes; begin try restClient := TRESTClient.Create(nil); restRequest := TRESTRequest.Create(restClient); restResponse := TRESTResponse.Create(restClient); try restClient.BaseURL := pUrl; restRequest.Client := restClient; restRequest.Method := pTPMetodo; restRequest.Resource := ''; restRequest.Response := restResponse; if iTimeOut > 0 then begin restRequest.Timeout := iTimeOut; end; iParametro := 0; restRequest.Params.Add; restRequest.Params[iParametro].ContentType := 'application/pdf'; if sBodyArquivo <> '' then begin { tentei deste modo TempStream := TMemoryStream.Create; TempStream.LoadFromFile(sBodyArquivo); restRequest.AddBody(TempStream,ctAPPLICATION_PDF); } ABytes := TFile.ReadAllBytes(sBodyArquivo); restRequest.Params.AddItem('body', BytesToStr(ABytes), pkREQUESTBODY, [], ctAPPLICATION_JSON); end; if trim(pContentType) <> '' then begin inc(iParametro); restRequest.Params.Add; restRequest.Params[iParametro].ContentType := pContentType;//ctAPPLICATION_XML; restRequest.Params[iParametro].Kind := pkGETorPOST; restRequest.Params[iParametro].Options := [poDoNotEncode]; restRequest.Params[iParametro].name := 'Content-Type'; restRequest.Params[iParametro].Value := pContentType; end; restRequest.Execute; if (restRequest.Response.StatusCode <> 200) then begin result := 'Erro '+restRequest.Response.StatusCode.ToString; end else if (restRequest.Response.StatusCode = 200) and (pTPMetodo = rmPUT) then begin result := '200'; end else if restRequest.Response.JSONValue.ToString <> '' then begin sTeste := StringReplace(restRequest.Response.JSONText,'\', '', [rfReplaceAll]); result := sTeste; end; except result := ''; end; finally FreeAndNil(restClient); end; end; Link to comment Share on other sites More sharing options...
Administradores Juliana Tamizou Posted July 5 Administradores Share Posted July 5 Boa tarde, Movido para a área aberta fim de mais colegas poderem apoiar. At. Juliana Tamizou Gerente de Projetos ACBr / Diretora de Marketing AFRAC Ajude o Projeto ACBr crescer - Seja Pro (15) 2105-0750 (15)99790-2976. Discord Projeto ACBr - A maior comunidade Open Source de Automação Comercial do Brasil Participe de nosso canal no Discord e fique ainda mais próximo da Comunidade !! Link to comment Share on other sites More sharing options...
Membros Pro AG Sistemas Posted July 5 Author Membros Pro Share Posted July 5 obrigado Link to comment Share on other sites More sharing options...
Membros Pro AG Sistemas Posted July 7 Author Membros Pro Share Posted July 7 Pessoal consegui consumir o serviço pode encerrar o tópico https://github.com/viniciussanchez/RESTRequest4Delphi/discussions/171 procedure TForm1.Button1Click(Sender: TObject); var lRes: IResponse; lStream: TMemoryStream; begin try lStream := TMemoryStream.Create; lStream.LoadFromFile('C:\arquivo.pdf'); lStream.Position := 0; lRes := TRequest.New .BaseURL(url) .AddHeader('', '') .ContentType('application/pdf') .AddBody(lStream, false) .PUT; ShowMessage(IntToStr(lRes.StatusCode)); finally lStream.Free; end; end; Link to comment Share on other sites More sharing options...
Consultores Alexandre de Paula Posted July 8 Consultores Share Posted July 8 Obrigado por reportar. Fechando. Para novas dúvidas, criar um novo tópico. Alexandre de Paula Ajude o Projeto ACBr crescer - Assine o SAC (15) 2105-0750 (15)99790-2976. Discord Projeto ACBr - A maior comunidade Open Source de Automação Comercial do Brasil Link to comment Share on other sites More sharing options...
Moderadores Juliomar Marchetti Posted July 8 Moderadores Share Posted July 8 17 horas atrás, AG Sistemas disse: Pessoal consegui consumir o serviço pode encerrar o tópico https://github.com/viniciussanchez/RESTRequest4Delphi/discussions/171 procedure TForm1.Button1Click(Sender: TObject); var lRes: IResponse; lStream: TMemoryStream; begin try lStream := TMemoryStream.Create; lStream.LoadFromFile('C:\arquivo.pdf'); lStream.Position := 0; lRes := TRequest.New .BaseURL(url) .AddHeader('', '') .ContentType('application/pdf') .AddBody(lStream, false) .PUT; ShowMessage(IntToStr(lRes.StatusCode)); finally lStream.Free; end; end; só para ajudar um pouco mais se tu quiser fazer sem usar nada basta olhar a chamada desse código acima dentro pois ele usa restclient interno Juliomar Marchetti skype: juliomar telegram: juliomar e-mail: [email protected] http://www.juliomarmarchetti.com.br Link to comment Share on other sites More sharing options...
Moderadores Juliomar Marchetti Posted July 8 Moderadores Share Posted July 8 Em 07/07/2024 at 15:40, AG Sistemas disse: Pessoal consegui consumir o serviço pode encerrar o tópico https://github.com/viniciussanchez/RESTRequest4Delphi/discussions/171 procedure TForm1.Button1Click(Sender: TObject); var lRes: IResponse; lStream: TMemoryStream; begin try lStream := TMemoryStream.Create; lStream.LoadFromFile('C:\arquivo.pdf'); lStream.Position := 0; lRes := TRequest.New .BaseURL(url) .AddHeader('', '') .ContentType('application/pdf') .AddBody(lStream, false) .PUT; ShowMessage(IntToStr(lRes.StatusCode)); finally lStream.Free; end; end; só nível de explicação segue abaixo o código retirado usando o componente diretamente ///RESTRequest4D.Request.Client.pas corresponde ao TRestClient //.BaseURL(url) FRESTClient.BaseURL := 'url'; //.AddHeader('', '') FRESTRequest.Params.clear; //.ContentType('application/pdf') FRESTRequest.Params.AddHeader('Content-Type','application/pdf'); FRESTRequest.Params.ParameterByName('Content-Type').Options := [poDoNotEncode]; //.AddBody(lStream, false) {$IF COMPILERVERSION <= 29} FRESTRequest.AddBody(lStream, TRESTContentType.ctAPPLICATION_OCTET_STREAM); {$ELSE} FRESTRequest.Body.Add(lStream, TRESTContentType.ctAPPLICATION_OCTET_STREAM); // .PUT; FRESTRequest.Method := TRESTRequestMethod.rmPUT; FRESTRequest.Execute; linhas comentadas são as do código lá da classe que encapsula e as demais seria usando ocomponente direto TRestClient Juliomar Marchetti skype: juliomar telegram: juliomar e-mail: [email protected] http://www.juliomarmarchetti.com.br Link to comment Share on other sites More sharing options...
Recommended Posts