通过php curl调用在API中获取post数据时出现问题
我正试图通过curl-PHP向slimapi发送一个文件 实际上,我有一个PHP文件,它接收来自post的数据,并假设使用接收到的数据调用一个slim API,slim API将数据存储在数据库中。当数据中没有文件时,它可以正常工作,但当我使用PHP curl将文件和其他数据一起发送到API并设置“content type:multipart/form data”时,我会错过API端中所有发布的数据。我想不出它出了什么问题 顺便说一下,当我用postman测试API时,它工作得很好。API成功获取文件并将其保存在存储器中。问题一定出在客户端,我在客户端使用curl和PHP调用API 有人能帮我设置curl调用以使API工作吗 非常感谢 route.php通过php curl调用在API中获取post数据时出现问题,php,curl,slim,Php,Curl,Slim,我正试图通过curl-PHP向slimapi发送一个文件 实际上,我有一个PHP文件,它接收来自post的数据,并假设使用接收到的数据调用一个slim API,slim API将数据存储在数据库中。当数据中没有文件时,它可以正常工作,但当我使用PHP curl将文件和其他数据一起发送到API并设置“content type:multipart/form data”时,我会错过API端中所有发布的数据。我想不出它出了什么问题 顺便说一下,当我用postman测试API时,它工作得很好。API成功获
$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;
}
不要自己设置内容类型头,让cURL自己处理<代码>多部分/表单数据
本身没有什么意义,它需要包含请求主体中用于将参数彼此分离的边界。cURL本身应该设置正确的值,包括边界。如果我从标题中删除内容类型,则在API端$params
提供发布的数据,但$file
仍然为空,我无法保存上传的文件!我的代码怎么了?!我删除了http\u build\u query
和content-type:multipart/form-data
,它成功了!感谢您的宝贵意见@04FS!或者,如果您不介意使用第三方库,您可以查看它,使post请求停止尝试自己设置内容类型头,并让cURL自己处理<代码>多部分/表单数据本身没有什么意义,它需要包含请求主体中用于将参数彼此分离的边界。cURL本身应该设置正确的值,包括边界。如果我从标题中删除内容类型,则在API端$params
提供发布的数据,但$file
仍然为空,我无法保存上传的文件!我的代码怎么了?!我删除了http\u build\u query
和content-type:multipart/form-data
,它成功了!感谢您的宝贵意见@04FS!或者,如果您不介意使用第三方库,您可以查看它以发出post请求