AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke REST Umsetzung eines CURL Befehls nach Delphi
Thema durchsuchen
Ansicht
Themen-Optionen

REST Umsetzung eines CURL Befehls nach Delphi

Ein Thema von mischerr · begonnen am 27. Nov 2024 · letzter Beitrag vom 28. Nov 2024
 
Benutzerbild von mischerr
mischerr

Registriert seit: 6. Feb 2004
Ort: Konz
243 Beiträge
 
Delphi 12 Athens
 
#1

REST Umsetzung eines CURL Befehls nach Delphi

  Alt 27. Nov 2024, 09:25
Hallo.

Ich habe eine Problem dass mich schon seit 2 Tagen verfolgt.
Und zwar muss ich folgenden CURL-Befehl zur Nutzung einer API in Delphi umsetzen welcher mehrere Dateien über ein "files" array überträgt:
Code:
curl -X 'POST' \
  'https://<provider>/Documents/Outbox'
  -H 'accept: application/json'
  -H 'X-Api-Key: My-API-Key'
  -H 'Content-Type: multipart/form-data'
  -F 'files=@testFile.pdf;type=application.pdf'
  -F 'files=@testFile.xml;type=text/xml'
Der CURL-Befehl funktioniert. Die Dateien liegen vor.
Ich habe es per RESTClient wie auch Indy versucht.
Andere Befehle welche per GET JSON Daten austauschen funktionieren einwandfrei.
Jedoch beim POST erhalte ich immer nur ein http/400.

Indy:
Code:
procedure SendFilesIndy(const PdfFile, XmlFile: string);
var HTTP: TIdHTTP;
    FormData: TIdMultiPartFormDataStream;
    Response: string;
begin
  HTTP:= TIdHTTP.Create(nil);
  FormData:= TIdMultiPartFormDataStream.Create;
  try
    HTTP.Request.CustomHeaders.AddValue('Accept', 'application/json');
    HTTP.Request.CustomHeaders.AddValue('X-Api-Key', 'My-API-Key');
    HTTP.Request.CustomHeaders.AddValue('Content-Type', 'multipart/form-data');
    AttachSSLHandler(HTTP, [sslvTLSv1_2]); // Setzt IOHandler
    if PdfFile<>'' then
      FormData.AddFile('files', PdfFile, GetMIMETypeFromFile(PdfFile));
//    FormData.AddFormField('files', ExtractFileName(PdfFile), '', GetMIMETypeFromFile(PdfFile), PdfFile);
    if XmlFile<>'' then
      FormData.AddFile('files', XmlFile, GetMIMETypeFromFile(XmlFile));
//    FormData.AddFormField('files', ExtractFileName(XmlFile), '', GetMIMETypeFromFile(XmlFile), XmlFile);
    Response:= HTTP.Post('https://<provider>/Documents/Outbox', FormData);
    // ...
  except
    on E: EIdHTTPProtocolException do begin
      OutputDebugStr(pchar('HTTP-Fehler: '+E.ErrorMessage+#13#10+'Antwort des Servers: '+E.Message));
    end;
    on E: Exception do
      OutputDebugStr(pchar('Allgemeiner Fehler: '+E.Message));
  end;
  FormData.Free;
  HTTP.Free;
end;
RESTClient:
Code:
procedure SendFilesREST(const PdfFile, XmlFile: string);
var RESTClient:= TRESTClient;
    RESTRequest:= TRESTRequest;
    RESTResponse:= TRESTResponse;
    MultipartData: TMultipartFormData;
begin
  RESTClient:= TRESTClient.Create(nil);
  RESTRequest:= TRESTRequest.Create(nil);
  RESTResponse:= TRESTResponse.Create(nil);
  RESTRequest.Client:= RESTClient;
  RESTRequest.Response:= RESTResponse;
  RESTRequest.Method:= rmPost;
  RESTRequest.ConnectTimeout:= -1;
  RESTRequest.ReadTimeout:= -1
  RESTRequest.Params.AddHeader('Accept', 'application/json');
  RESTRequest.Params.AddHeader('X-Api-Key', 'My-API-Key');
  RESTRequest.Params.AddHeader('Content-Type', 'multipart/form-data');
  MultipartData:= TMultipartFormData.Create;
  try
    FRESTClient.BaseURL:= 'https://<provider>/Documents/Outbox';
    FRESTRequest.Method:= rmPOST;
    if PdfFile<>'' then
      MultipartData.AddFile('files', PdfFile, GetMIMETypeFromFile(PdfFile));
    if XmlFile<>'' then
      MultipartData.AddFile('files', XmlFile, GetMIMETypeFromFile(XmlFile));
    FRESTRequest.AddBody(MultipartData);
    FRESTRequest.Execute;
    if FRESTResponse.Status.Success then begin
      // ...
    end;
  finally
    RESTClient.Free;
    RESTRequest.Free;
    RESTResponse.Free;
    MultipartData.Free;
  end;
end;
Hat evtl. jemand sowas schon mal erfolgreich versucht und einen Tip für mich?
  Mit Zitat antworten Zitat
 

 

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:37 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz