PHP CURL PUT File - ich bin am verzweifeln
Hallo,
ich bastele gerade an einem PHP Script eine Datei an unser DMS per RESTFUL API zu senden.
Es ist mein erstes CURL-Projekt in PHP
Ich bin eigentlich schon fast am Ziel, aber am letzen Schritt, die Datei per PUT an das DMS zu übergeben verzweifele ich gerade.
Ich habe schon alles was man im Netz so finden kann durchgeackert und auch ausprobiert, aber das DMS lehnt meinen Aufruf bisher immer ab.
HTTP/2 400 cache-control: no-cache pragma: no-cache expires: -1 date: Thu, 13 Jun 2024 15:35:57 GMT content-length: 0 "
errorstring(0) ""
Hier ist der Aufruf per curl per Commandline der funktioniert :
Natürlich ist die Variable <TOKEN> beim Aufruf der aktuell gültige Token und die documentid aus der Url auch die die ich mir vorher vom DMS geholt habe.
Könnte mir mal bitte jemand helfen, wie man diesen Aufruf in PHP verpackt?
Hier einer meiner vielen erfolglosen Versuche :
ich bastele gerade an einem PHP Script eine Datei an unser DMS per RESTFUL API zu senden.
Es ist mein erstes CURL-Projekt in PHP
Ich bin eigentlich schon fast am Ziel, aber am letzen Schritt, die Datei per PUT an das DMS zu übergeben verzweifele ich gerade.
Ich habe schon alles was man im Netz so finden kann durchgeackert und auch ausprobiert, aber das DMS lehnt meinen Aufruf bisher immer ab.
HTTP/2 400 cache-control: no-cache pragma: no-cache expires: -1 date: Thu, 13 Jun 2024 15:35:57 GMT content-length: 0 "
errorstring(0) ""
Hier ist der Aufruf per curl per Commandline der funktioniert :
curl -L -X PUT "https://sv016/AmagnoMe/api/v2/documents/7f8b0969-a156-4bec-2ef7-08dc8a744917/file" --header "Content-Type: multipart/form-data" --header "Amagno-File-Create-Date: 2024-06-13T07:00:00.023Z" --header "Amagno-File-Change-Date: 2024-06-13T07:00:00.023Z" --header "Authorization: Bearer <TOKEN>" --form " =@C:/wvs/Test.pdf" -v
Natürlich ist die Variable <TOKEN> beim Aufruf der aktuell gültige Token und die documentid aus der Url auch die die ich mir vorher vom DMS geholt habe.
Könnte mir mal bitte jemand helfen, wie man diesen Aufruf in PHP verpackt?
Hier einer meiner vielen erfolglosen Versuche :
<?PHP
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $create_file_url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HEADER, 1);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'PUT');
curl_setopt($ch, CURLOPT_HTTPHEADER, [
'Accept: application/json',
'Authorization: Bearer '.$token,
'Content-Type: multipart/form-data',
'Amagno-File-Create-Date: 2024-06-13T07:00:00.023Z',
'Amagno-File-Change-Date: 2024-06-13T07:00:00.023Z'
]
);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
curl_setopt($ch, CURLOPT_CAINFO, "test-amagno-org.pem");
$postData = array(
'Testfile' => '@./Test.pdf',
);
curl_setopt($ch, CURLOPT_POSTFIELDS, $postData);
$response = curl_exec($ch);
$info = curl_getinfo($ch);
echo "<br>";
var_dump($response);
$err = curl_error($ch);
echo "<br>error";
var_dump($err);
curl_close($ch);
?>
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 7389813588
Url: https://administrator.de/contentid/7389813588
Ausgedruckt am: 21.11.2024 um 17:11 Uhr
5 Kommentare
Neuester Kommentar
Das Einbinden von Files via @ wurde laut Doku per Default in curl deaktiviert (CURLOPT_SAFE_UPLOAD) und ist ab PHP 7 immer True.
https://www.php.net/manual/de/function.curl-setopt.php
Nutze also curl_file_create dafür
Teste mal
Gruß
CURLOPT_SAFE_UPLOAD
Immer true, was die Unterstützung für das Präfix @ für das Hochladen von Dateien in CURLOPT_POSTFIELDS deaktiviert. Das bedeutet, dass Werte, die mit @ beginnen, sicher als Felder übergeben werden können. Für das Hochladen kann stattdessen CURLFile verwendet werden.
Nutze also curl_file_create dafür
Teste mal
<?PHP
$ch = curl_init();
$create_file_url = 'https://sv016/AmagnoMe/api/v2/documents/7f8b0969-a156-4bec-2ef7-08dc8a744917/file';
curl_setopt($ch, CURLOPT_URL, $create_file_url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HEADER, 1);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'PUT');
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
'Accept: application/json',
'Authorization: Bearer '.$token,
'Content-Type: multipart/form-data',
'Amagno-File-Create-Date: 2024-06-13T07:00:00.023Z',
'Amagno-File-Change-Date: 2024-06-13T07:00:00.023Z'
]
);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
curl_setopt($ch, CURLOPT_CAINFO, "test-amagno-org.pem");
$cfile = curl_file_create('./test.pdf','application/pdf','test.pdf');
$postdata = ['file' => $cfile];
curl_setopt($ch, CURLOPT_POSTFIELDS, $postdata);
$response = curl_exec($ch);
if(!curl_errno($ch)){
print_r($response);
}else{
echo "Error: " . curl_error($ch);
}
curl_close($ch);
👍👋.
Guten Morgen!
Schau dir
https://github.com/guzzle/guzzle
als HTTP-Client an, spätestens wenn das Skript umfangreicher wird, wird das ganze übersichtlicher.
Stefan
Schau dir
https://github.com/guzzle/guzzle
als HTTP-Client an, spätestens wenn das Skript umfangreicher wird, wird das ganze übersichtlicher.
Stefan