php - 使用 cURL 使用 PHP 上传文件(服务器到服务器)
问题描述
我在 RapidApi 上的 API 控制台中有以下 php 代码正常工作:
<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://webit-computer-vision.p.rapidapi.com/describe",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => "-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"image\"\r\n\r\n\r\n-----011000010111000001101001--\r\n\r\n",
CURLOPT_HTTPHEADER => [
"content-type: multipart/form-data; boundary=---011000010111000001101001",
"x-rapidapi-host: webit-computer-vision.p.rapidapi.com",
"x-rapidapi-key: XXXXXXXXXX"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}
唯一的问题是它还包含一个发送到端点的文件。如何将文件上传到给定的端点?内容类型似乎已正确设置。我相信我只需要另外发送文件的内容。
解决方案
对于任何想知道的人,我可以通过使用以下代码修改标头来使其工作:
CURLOPT_HTTPHEADER => [
"content-type: multipart/form-data",
"x-rapidapi-host: webit-computer-vision.p.rapidapi.com",
"x-rapidapi-key: VMssAjUwitmshMGT0yv1SbvOhkLVp1f3BaqjsnpKZ8t9yLcbxs"
]
然后必须更改以下内容以使图像文件正确发布:
$fields = [
'image' => new \CurlFile("images/2021_04_01_Ied8W_Ex0P-meVoActjCQ.jpg", 'image/jpeg', 'filename.jpg')
];
...
CURLOPT_POSTFIELDS => $fields,
...
在那之后很快就开始工作了=)
推荐阅读
- c++ - 空 unordered_map 上的 find() 会导致访问冲突吗?
- java - opencsv 从未知行但已知单词读取?
- javascript - 使用 Axios 从 http 响应下载 PDF
- java - 构造函数过度注入和门面服务概念
- spring-boot - 如何禁用/配置位置标头的 Spring Cloud Gateway 重写
- facebook-login - 如何呈现 AccountKit UI
- angular6 - 来自数据库的 Angular 6 路由
- python - 在 3*3 网格矩阵中找到数字 2*2 方格
- c# - MYSQL“使用”查询在应用程序中选择数据库
- java - JPA:通过覆盖数据源在 JSE 和 JUnit 中重用 persistence.xml 和 jta-data-source