Я пытаюсь загрузить несколько изображений с помощью PHP Curl. API, который я использую, дает мне следующий пример:
curl -v -s -u username:password \ -H "Content-Type: multipart/form-data" \ -H "Accept: application/vnd.com.example.api+json" \ -F "image=@img1.jpeg;type=image/jpeg" \ -F "image=@img2.jpeg;type=image/jpeg" \ -XPUT 'https://example.com/api/sellers/12/ads/217221/images'
Поэтому в моем php-скрипте я попробовал это:
$files = array(); foreach($photos as $photo) { $cfile = new CURLFile('../' . $photo, 'image/jpeg', 'test_name'); $files[] = $cfile; } $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, 'https://services.example.com/seller-api/sellers/' . $seller . '/ads/' . $voertuig_id . '/images'); curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "PUT"); curl_setopt($ch, CURLOPT_POSTFIELDS, $files); curl_setopt($ch, CURLOPT_PROXY,'api.test.sandbox.example.com:8080'); curl_setopt($ch, CURLOPT_USERPWD, 'USER:PASS'); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_HEADER, 1); curl_setopt($ch, CURLOPT_HTTPHEADER, array( 'Host: services.example.com', 'Content-type: multipart/form-data; boundary=vjrLefDejJaWiU0JzZfsadfasd1rMcE2HQ-n7XsSx', 'Accept: application/vnd.com.example.api+json' )); $output = curl_exec($ch); curl_close($ch);
Сначала я получил ответ от API:
{ "errors":{ "error":{ "@key":"unsupported-form-element" } } }
но теперь ответа нет. Как использовать завиток для загрузки нескольких файлов?
если $ files – пустой JSON, например, он не дает никакой ошибки и возвращает изображения (пустые).
Это документация API, которую я использую: https://services.mobile.de/manual/new-seller-api.html#_upload_images
EDIT: я попытался создать тело запроса и отправить его, но он ничего не делает:
$requestBody = ''; $requestBody .= '--vjrLeiXjJaWiU0JzZkUPO1rMcE2HQ-n7XsSx\r\n'; $requestBody .= 'Content-Disposition: form-data; name="image"; filename="ferrari.JPG"\r\n'; $requestBody .= 'Content-Type: image/jpeg\r\n'; $requestBody .= 'Content-Transfer-Encoding: binary\r\n'; curl_setopt($ch, CURLOPT_POSTFIELDS, $requestBody);
попробуйте использовать массив- помощник , как он используется в документации CURLFile
$photos = [ 'img1' => 'img1.jpg', 'img2' => 'img2.jpg' ] $files = []; foreach($photos as $key => $photo) { $cfile = new CURLFile('../' . $photo, 'image/jpeg', $key); $files[$key] = $cfile; } $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, 'https://services.example.com/seller-api/sellers/' . $seller . '/ads/' . $voertuig_id . '/images'); curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "PUT"); curl_setopt($ch, CURLOPT_POSTFIELDS, $files); curl_setopt($ch, CURLOPT_PROXY,'api.test.sandbox.example.com:8080'); curl_setopt($ch, CURLOPT_USERPWD, 'USER:PASS'); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_HEADER, 1); curl_setopt($ch, CURLOPT_HTTPHEADER, array( 'Host: services.example.com', 'Content-type: multipart/form-data; boundary=vjrLefDejJaWiU0JzZfsadfasd1rMcE2HQ-n7XsSx', 'Accept: application/vnd.com.example.api+json' )); $output = curl_exec($ch); curl_close($ch);