我有以下curl命令来自
curl -sSLX POST 'https://file-scan.aws.us.pangea.cloud/v1/scan' \
-H 'Authorization: Bearer my-token-goes here' \
-H 'Content-Type: multipart/form-data' \
-F 'request={"transfer_method":"multipart"};type=application/json' \
-F '[email protected];type=application/octet-stream'
现在我需要用 PHP 编写curl,以便按照下面的代码上传文件
<?php
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://file-scan.aws.us.pangea.cloud/v1/scan');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_HTTPHEADER, [
'Authorization: Bearer my-token-goes-here',
'Content-Type: multipart/form-data',
]);
curl_setopt($ch, CURLOPT_POSTFIELDS, [
'request' => '{"transfer_method":"multipart"}',
'upload' => new CURLFile('AnnBall.png', 'application/octet-stream'),
]);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
echo $response = curl_exec($ch);
curl_close($ch);
?>
这是我遇到的错误
{“request_id”:“prq_nxj6w7ws5ussjsniphkzk7i3pqlf5peu”,“request_time”:“2024-04-25T17:15:00.638627Z”,“response_time”:“2024-04-25T17:15:01.722276Z”,“状态":"无效正文错误","summary":"无法读取请求正文","result":null}
有人可以帮我解决这个问题吗
您的代码存在一些可能存在的问题:
使用
multipart/form-data
时,请确保为 CURLOPT_POSTFIELDS
选项传递字符串而不是数组。如果传递数组,PHP 会自动将数组编码为 multipart/form-data
格式,但在这种情况下它无法正确处理嵌套数据。因此,您需要手动构建多部分主体。
请确保文件路径“AnnBall.png”正确并且可以从您的 PHP 脚本访问。
这是您可以尝试的工作代码:
<?php
// Endpoint URL
$url = 'https://file-scan.aws.us.pangea.cloud/v1/scan';
// Request headers
$headers = [
'Authorization: Bearer YOUR_ACCESS_TOKEN', // Replace YOUR_ACCESS_TOKEN with your actual token
'Content-Type: multipart/form-data'
];
// Request data
$data = [
'request' => json_encode(["transfer_method" => "multipart"]),
'upload' => new CURLFile('AnnBall.png', 'application/octet-stream', 'upload')
];
// Initialize cURL session
$ch = curl_init();
// Set cURL options
curl_setopt_array($ch, [
CURLOPT_URL => $url,
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => $data,
CURLOPT_HTTPHEADER => $headers,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_SSL_VERIFYPEER => false, // Note: set to true in production for better security
]);
// Execute the request
$response = curl_exec($ch);
// Check for errors
if ($response === false) {
echo 'cURL error: ' . curl_error($ch);
}
// Close cURL session
curl_close($ch);
// Output response
echo $response;
?>
这是上述代码的简单解释:
我使用
curl_setopt_array
功能一次设置多个选项,并且我还使用 curl_file_create
功能来管理文件上传。
注意: 将
YOUR_ACCESS_TOKEN
替换为您的实际令牌。