
Nocklas
Ich verwende eine API, die möchte, dass ich einen POST mit den Binärdaten aus einer Datei als Anforderungstext sende. Wie kann ich dies mit PHP cURL erreichen?
Das Befehlszeilenäquivalent dessen, was ich erreichen möchte, lautet:
curl --request POST --data-binary "@myimage.jpg" https://myapiurl

vfsoraki
Du kannst deinen Körper einfach reinlegen CURLOPT_POSTFIELDS
.
Beispiel:
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "http://url/url/url" );
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1 );
curl_setopt($ch, CURLOPT_POST, 1 );
curl_setopt($ch, CURLOPT_POSTFIELDS, "body goes here" );
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: text/plain'));
$result=curl_exec ($ch);
Von hier genommen
Stellen Sie natürlich Ihren eigenen Header-Typ ein und tun Sie es einfach file_get_contents('/path/to/file')
für Körper.

Serhii Andriichuk
Dies kann über die CURLFile-Instanz erfolgen:
$uploadFilePath = __DIR__ . '/resource/file.txt';
if (!file_exists($uploadFilePath)) {
throw new Exception('File not found: ' . $uploadFilePath);
}
$uploadFileMimeType = mime_content_type($uploadFilePath);
$uploadFilePostKey = 'file';
$uploadFile = new CURLFile(
$uploadFilePath,
$uploadFileMimeType,
$uploadFilePostKey
);
$curlHandler = curl_init();
curl_setopt_array($curlHandler, [
CURLOPT_URL => 'https://postman-echo.com/post',
CURLOPT_RETURNTRANSFER => true,
/**
* Specify POST method
*/
CURLOPT_POST => true,
/**
* Specify array of form fields
*/
CURLOPT_POSTFIELDS => [
$uploadFilePostKey => $uploadFile,
],
]);
$response = curl_exec($curlHandler);
curl_close($curlHandler);
echo($response);
Sehen – https://github.com/andriichuk/php-curl-cookbook#upload-file

heriipurnama
Versuche dies:
$postfields = array(
'upload_file' => '@'.$tmpFile
);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url.'/instances');
curl_setopt($ch, CURLOPT_POST, 1 );
curl_setopt($ch, CURLOPT_SAFE_UPLOAD, false);//require php 5.6^
curl_setopt($ch, CURLOPT_POSTFIELDS, $postfields);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$postResult = curl_exec($ch);
if (curl_errno($ch)) {
print curl_error($ch);
}
curl_close($ch);
Body auf Binärdaten setzen und ohne hochladen multipart/form-data
der Schlüssel ist, Curl zu betrügen, zuerst sagen wir ihm, er soll PUT, dann POST:
<?php
$file_local_full="/tmp/foobar.png";
$content_type = mime_content_type($file_local_full);
$headers = array(
"Content-Type: $content_type", // or whatever you want
);
$filesize = filesize($file_local_full);
$stream = fopen($file_local_full, 'r');
$curl_opts = array(
CURLOPT_URL => $url,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_PUT => true,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_HTTPHEADER => $headers,
CURLOPT_INFILE => $stream,
CURLOPT_INFILESIZE => $filesize,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1
);
$curl = curl_init();
curl_setopt_array($curl, $curl_opts);
$response = curl_exec($curl);
fclose($stream);
if (curl_errno($curl)) {
$error_msg = curl_error($curl);
throw new \Exception($error_msg);
}
curl_close($curl);
credits: Wie kann man eine große Datenmenge innerhalb von PHP curl ohne Speicheraufwand POST?
Die folgende Lösung hat bei mir gut funktioniert.
$ch = curl_init();
$post_url = "https://api_url/"
curl_setopt($ch, CURLOPT_URL, $post_url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'PUT');
$post = array(
'file' => '@' .realpath('PATH_TO_DOWNLOADED_ZIP_FILE')
);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
$headers = array();
$headers[] = 'Authorization: Bearer YOUR_ACCESS_TOKEN';
$headers[] = 'Content-Type: application/x-www-form-urlencoded';
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
$result = curl_exec($ch);
if (curl_errno($ch)) {
echo 'Error:' . curl_error($ch);
}
curl_close($ch);
bezogen: curl zu php-curl

Samar
Sie müssen einen geeigneten Header bereitstellen, um einen POST mit den Binärdaten zu senden.
$header = array('Content-Type: multipart/form-data');
curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
curl_setopt($resource, CURLOPT_POSTFIELDS, $arr_containing_file);
Ihre $arr_condensing_file kann beispielsweise wie erwartet eine Datei enthalten (ich meine, Sie müssen das entsprechende erwartete Feld vom API-Dienst bereitstellen).
$arr_containing_file = array('datafile' => '@inputfile.ext');
10053700cookie-checkPHP cURL: Wie setze ich Body auf Binärdaten?yes
Was hast du versucht? Hier ist ein Beispiel mit cURL: stackoverflow.com/questions/9134003/… Sie müssen es nur ein wenig mit PHP anpassen.
– ficuscr
12. August 2015 um 17:08 Uhr