PHP cURL: Wie setze ich Body auf Binärdaten?

Lesezeit: 3 Minuten

PHP cURL Wie setze ich Body auf Binardaten
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

  • 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

1647864246 776 PHP cURL Wie setze ich Body auf Binardaten
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.

  • Das war ein Lebensretter. Ich habe versucht, eine Datei einzusenden postfields in gewisser Weise nicht an diese gedacht!

    – Kedor

    4. September 2018 um 15:00 Uhr

  • Das hilft! Anscheinend kann diese Methode jede Art von Dateien mit dem Header “Content-Type: application/binary” hochladen.

    – Neptun

    19. Januar 2019 um 7:16 Uhr

  • @Neptune Sicher, aber das Festlegen des richtigen Inhaltstyps stellt sicher, dass das empfangende Ende den Datentyp korrekt bestimmen kann.

    – vfsoraki

    2. Oktober 2019 um 15:31 Uhr

1643708046 382 Korrekte Methode zum Festlegen des Bearer Tokens mit CURL
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

  • Wird dies nicht zu einer mehrteiligen Anfrage führen?

    – Steen Schütt

    3. März 2020 um 13:27 Uhr

PHP cURL Wie setze ich Body auf Binardaten
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-datader 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

1647864248 72 PHP cURL Wie setze ich Body auf Binardaten
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');

1005370cookie-checkPHP cURL: Wie setze ich Body auf Binärdaten?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy