Send binary file

Am de trimis un fisier simplu la un API (trebuie in mod binar), din Postman fisierul se trimite, e ok. Insa… nu pare sa functioneze din codul PHP (folosesc Laravel), aveti idee, ce ar fi gresit?

Raw din Postman:

curl --location --request POST 'https://api.ssok.com/ads' \
--header 'Authorization: Basic SFlNRTo5MGoyM2VhJcTdlWHFJOVNDN3ZuQg22==' \
--header 'Content-Type: application/pdf' \
--data-binary '@/Users/Ionut/Downloads/myfile.pdf'

Cod PHP (primesc mesajul “fisier trimis”, insa nu se trimite…)

$file_path = storage_path('app/public/file2.pdf');

if (file_exists($file_path))
{
     $fields = array('file' => '@' . $file_path);

     $ch = curl_init();
     curl_setopt($ch, CURLOPT_URL, "https://api.ssok.com/ads");
     curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
     curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/pdf'));
     curl_setopt($ch, CURLOPT_USERPWD, "admin:pass2222");
     curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
     curl_setopt($ch, CURLOPT_POST, 1);
     curl_setopt($ch, CURLOPT_POSTFIELDS, $fields);
     $result = curl_exec($ch); 
     curl_close($ch);

     echo "fisier trimis";
}

Primesc la respone raspuns afirmativ de la API, se conecteaza, insa cred ca e ceva gresit la post_fields…

Poate merge asa

$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, 'https://api.ssok.com/ads');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, 1);
$post = array(
    'file' => '@' .realpath('/Users/Ionut/Downloads/myfile.pdf')
);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post);

$headers = array();
$headers[] = 'Authorization: Basic SFlNRTo5MGoyM2VhJcTdlWHFJOVNDN3ZuQg22==';
$headers[] = 'Content-Type: application/pdf';
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);

$result = curl_exec($ch);
if (curl_errno($ch)) {
    echo 'Error:' . curl_error($ch);
}
curl_close($ch);

Iti afiseaza si daca este o eroare daca apare si poti sa vezi unde este problema. Aditional verifica si permisiuni si toate cele.


Uni zic sa folosesti Guzzle ca este mai simplu