Проблема получения данных поста в API через вызов php curl - PullRequest
0 голосов
/ 11 марта 2019

Я пытаюсь отправить файл в тонкий API через curl PHP.

На самом деле у меня есть PHP-файл, который получает данные из почты, и я предполагаю вызвать тонкий API с полученными данными, и тонкий API собирается сохранить данные в базе данных. Это прекрасно работает, когда в данных нет файла, но когда я отправляю файл в API вместе с другими данными с помощью PHP curl и устанавливаю 'content-type: multipart / form-data', я пропускаю все опубликованные данные на стороне API. Я не мог понять, что с ним не так !!!

Кстати, это хорошо работает, когда я тестирую API с почтальоном. API успешно получает файл и сохраняет его в хранилище. Проблема должна быть на стороне клиента, где я вызываю API, используя curl и PHP.

Может кто-нибудь помочь мне, как настроить вызов curl, чтобы заставить API работать?

Большое спасибо

route.php

$app->post('/softwareskills/insert', SoftwareSkillsController::class . ':insert')->setName('SoftwareSkills.insert');

SoftwareSkillsController.php

class SoftwareSkillsController {


    public function insert(Request $request, Response $response, array $args)
    {

            $params= $request->getParsedBody();
            $file = $request->getUploadedFiles();
            var_dump($params); // return empty array!
            var_dump($file); // return empty array!

    }
}

upload.php

<?php
     // $_POST and $_FILES to send them via php CURL

$tmpfile = $_FILES['attachment']['tmp_name'];
$filename = basename($_FILES['attachment']['name']);
$filemime = $_FILES['attachment']['type'];

$data = array(
    "StNo" => $_POST['StNo'],
    "SoftwareName" =>  $_POST['SoftwareName'],
    "proficiency" => $_POST['proficiency'],
    "attachment" => new CURLFile($tmpfile,$filemime,$filename)
);

$curl = curl_init();

curl_setopt_array($curl, array(
    CURLOPT_URL => "http://myapi.com/softwareskills/insert",
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_ENCODING => "",
    CURLOPT_MAXREDIRS => 10,
    CURLOPT_TIMEOUT => 30,
    CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
    CURLOPT_CUSTOMREQUEST => "POST",
    CURLOPT_POSTFIELDS => http_build_query($data),
    CURLOPT_HTTPHEADER => array(
        "content-type: multipart/form-data"
    ),
));

$response = curl_exec($curl);
$err = curl_error($curl);

curl_close($curl);

if ($err) {
    echo "cURL Error #:" . $err;
} else {
    echo $response;
}
...