@scotch18
Junior-разработчик 1С-Битрикс

Как отправить файл POST через cURL?

Как отправить файлы при помощи cURL и проверить что файл дошел?

curl_setopt($curl, CURLOPT_POSTFIELDS, [
        'token' => $Token,
        'sig' => $sig,
        'Request[files][0]' =>  new CURLFile('/upload/iblock/158/158e2eabb60b3830ae08c97bb288a258.jpg', 'image/jpeg' , 'image1.jpg'),
        'Request[files][1]' =>  new CURLFile('/upload/iblock/158/158e2eabb60b3830ae08c97bb288a258.jpg', 'image/jpeg' , 'image2.jpg'),
        'Request[files][2]' => new CURLFile('/upload/iblock/158/158e2eabb60b3830ae08c97bb288a258.jpg', 'image/jpeg' , 'image3.jpg'),


    ]);


Сейчас пытаюсь отправить таким образом, но API ничего не говорит, раньше хотяб ругался. Может быть я что-то важное упускаю?

UPD
Полностью код:

<?

function createNewItem($Item){



    $curl = curl_init($url);


    $MethodName = 'CreateRequest';
    $Identificator = '945';
    $Token = ;//тут токен

    $sig = md5($MethodName.$Identificator.substr(md5($Token), 0, 10));


    curl_setopt($curl, CURLOPT_POST, true);
    curl_setopt($curl, CURLOPT_TIMEOUT, 30);
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);
    curl_setopt($curl, CURLOPT_POSTFIELDS, [
        'token' => $Token,
        'sig' => $sig,
        'Request[name]' => $Item['NAME'],
        'Request[measure]' => "1",
        'Request[weight]' => $Item['PROPERTY_WEIGHT_VALUE'],
        'Request[length]' => "145",
        'Request[width]' => $Item['PROPERTY_WIDTH_VALUE'],
        'Request[height]' => $Item['HEIGHT'],
        'Request[volume]' => "12",
        'Request[certificate]' =>"1241251",
        'Request[fabricatorText]' => "Name",
        'Request[fabricCode]' => $Item['PROPERTY_ARTICLE_VALUE'],
        'Request[country]' => "Россия",
        'Request[description]' => $Item['DETAIL_TEXT'],
        'Request[minCount]' => "12",
        'Request[vendorPrice]' => $Item['PROPERTY_PRICE_VALUE'],
        'Request[barcodes]' => "9980000019541",
        'Request[files][0]' => curl_file_create(__DIR__ ."/upload/iblock/158/158e2eabb60b3830ae08c97bb288a258.jpg",'image/jpeg','test1'),
        'Request[files][1]' => curl_file_create(__DIR__ ."/images/indexpage-recipies-image.jpg",'image/jpeg','test2'),
        'Request[files][2]' => curl_file_create(__DIR__ ."/images/indexpage-action-image.jpg",'image/jpeg','test3'),


    ]);

    $response = curl_exec($curl);
    curl_close($curl);

    if (curl_errno($curl)){
        echo '<span style="color:red">';
        echo curl_error($curl);
        echo '</span>';
    } else {
        echo '<span style="color:green">';
        echo "Удачно";
        echo $response;
        echo '</span>';
    }


}

?>


Сервер отдает FALSE в «$response = curl_exec($curl);» Только при поптыке загрузить файлы. Если это убрать, то ответ сервера получаю.
  • Вопрос задан
  • 61 просмотр
Решения вопроса 1
@scotch18 Автор вопроса
Junior-разработчик 1С-Битрикс
Проблема была в том, что был указан неверный путь. Вместо
'Request[files][0]' => curl_file_create(__DIR__ ."/upload/iblock/158/158e2eabb60b3830ae08c97bb288a258.jpg",'image/jpeg','test1'),


Указал

'Request[files][0]' => curl_file_create($_SERVER["DOCUMENT_ROOT"] ."/upload/iblock/158/158e2eabb60b3830ae08c97bb288a258.jpg",'image/jpeg','test1'),


И все заработало
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Какая у вас версия PHP? С PHP 5.5 такой метод загрузки файлов вызывает ошибку, поэтому следует применять CURLFile.
Вот здесь вам гайд подробный:
https://snipp.ru/php/curl
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы