通过php curl调用在API中获取发布数据时出现问题

时间:2019-03-11 15:27:32

标签: php curl slim

我正在尝试通过curl PHP将文件发送到瘦API。

实际上,我有一个PHP文件,该文件从发布数据中接收,并假定使用接收到的数据调用一个瘦API,并且瘦API将把数据存储在数据库中。当数据中没有文件时,它工作正常,但是当我使用PHP curl将文件与其他数据一起发送到API并设置“内容类型:multipart / form-data”时,我错过了API端中所有已发布的数据。我不知道这是怎么回事!!

当我用邮递员测试API时,可以通过这种方式很好地工作。 API成功获取文件并将其保存在存储中。问题一定是在客户端,我使用curl和PHP调用了API。

有人可以帮助我如何设置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;
}

0 个答案:

没有答案