![]() |
curl mit @ im Dateinamen nach Pascal übersetzen
Hi,
bisher hatte ich immer curl-POST abgesetzt, wo ich eine Datei übertragen musste, z.B. curl -X POST ![]() Dazu habe ich folgende Struktur aufgebaut:
Delphi-Quellcode:
Jetzt muss ich aber ein Array von files übertragen, was im curl-Befehl folgendermaßen aussieht:
Http: TNetHTTPClient;
formData: TMultipartFormData; headers: TNetHeaders; Http:=TNetHTTPClient.create(nil); formData:=TMultipartFormData.create(); headers:=TNetHeaders.create(); setLength(headers, 2); headers[0]:=TNameValuePair.create('Content-Type', 'multipart/form-data'); headers[1]:=TNameValuePair.create('Authorization', 'Bearer ' + bearer); formData.AddFile('files[]', filename); Http.Post('https://pushinglimits.club/api/oauth/upload_fit_file',formData,nil,headers); curl -X POST ![]() Wie bekommt ich jetzt das '@' in den Befehl via Delphi? Einfach nur
Delphi-Quellcode:
ist es nicht, dann wird die Datei nicht gefunden.
formData.AddFile('files[]', '@'+filename);
Vielleicht hat da ja jemand einen Tipp. Grüße, Philipp |
AW: curl mit @ im Dateinamen nach Pascal übersetzen
Das @ gehört doch nur zu cUrl. Wenn du den Upload selbst macht, gehört das nicht dazu.
|
AW: curl mit @ im Dateinamen nach Pascal übersetzen
Yepp, danke. Dann muss es irgendwie an dem erwarteten Array liegen, dass es nicht klappt. Ich bekomme, wenn ich das POST durchführe eine Fehlermeldung zurück:
'<!DOCTYPE html>'#$A'<html lang="en">'#$A'<head>'#$A'<meta charset="utf-8">'#$A'<title>Error</title>'#$A'</head>'#$A'<body>'#$A'<pre>Cannot POST /oauth/upload_fit_file</pre>'#$A'</body>'#$A'</html>'#$A Da muss ich mal mit dem Schnittstellen-Hersteller quatschen. |
AW: curl mit @ im Dateinamen nach Pascal übersetzen
Aber mit cUrl klappt es?
Dann schicke die Daten doch einfach an einen lokalen Webserver ohne SSL, sprich nur via http. Dann kannst du die beiden Anfragen ganz einfach z.B. in Wireshark vergleichen oder auch in anderen Tools. |
AW: curl mit @ im Dateinamen nach Pascal übersetzen
Schaue ich mir morgen mal genauer an. Am Array liegt es nicht. Der Status-Code ist übrigens 404, obwohl es via cURL geht. Da muss irgendwas an den http-Settings schräg sein.
Der gleiche Code klappt an anderer Stelle mit x anderen Upload-Anbietern. |
AW: curl mit @ im Dateinamen nach Pascal übersetzen
Eventuell hilfreich:
Delphi-Quellcode:
if pos('https', LowerCase(URL))<>0 then
Http.SecureProtocols := [THTTPSecureProtocol.TLS12]; |
AW: curl mit @ im Dateinamen nach Pascal übersetzen
Liste der Anhänge anzeigen (Anzahl: 1)
Das TLS 1.2 passiert automatisch, dies habe ich auch schon im Hintergrund gecheckt. Ich habe jetzt auch mal TMultipartFormData.GenerateBoundary so angepasst, dass die gleiche Boundary aufgebaut wird, das ist es aber auch nicht.
|
AW: curl mit @ im Dateinamen nach Pascal übersetzen
I am afraid that there is no easy way (ready to be used API), and these files should be manually formed into a body request.
This show the structure ![]() The most important is the Content-Disposition to be filled right, and you must fill the "Content-Type: multipart/form-data; boundary=" not leaving it to be filled automatically. Also you don't need that much of '-', in "boundary=" it is shorter by '-', in fact you don't need them at all in in the HTTP header, only in the body as separator you need 2 dashes "--". |
AW: curl mit @ im Dateinamen nach Pascal übersetzen
Mit dem folgenden Code geht es erfolgreich via Indy:
Delphi-Quellcode:
Macht von außen betrachtet, genau das gleiche, aber irgendwie scheint die interne Formatierung anders zu sein.
with TIdHTTP.Create(nil) do
try var FIdSSLIOHandlerSocketOpenSSL:TIdSSLIOHandlerSocketOpenSSL:=TIdSSLIOHandlerSocketOpenSSL.Create(nil); var Params: TIdMultiPartFormDataStream; filename:=StringReplace(Training.filename, '.ictt', '.fit', [rfIgnoreCase]); FIdSSLIOHandlerSocketOpenSSL.SSLOptions.Method := sslvTLSv1_2; FIdSSLIOHandlerSocketOpenSSL.SSLOptions.SSLVersions := [sslvTLSv1_2]; IOHandler := FIdSSLIOHandlerSocketOpenSSL; Request.ContentType := 'multipart/form-data'; Request.CustomHeaders.add('Authorization: Bearer ' + bearer); Params := TIdMultiPartFormDataStream.Create; try params.AddFile('file', filename, GetMIMETypeFromFile(filename)); ResponseStr := Post('https://pushinglimits.club/api/oauth/upload_single_fit_file', Params); finally Params.Free; end; finally Free; end; |
AW: curl mit @ im Dateinamen nach Pascal übersetzen
Zitat:
![]() ![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:02 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