首页 > 解决方案 > 使用 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;
}

唯一的问题是它还包含一个发送到端点的文件。如何将文件上传到给定的端点?内容类型似乎已正确设置。我相信我只需要另外发送文件的内容。

标签: phpcurluploadcontent-type

解决方案


对于任何想知道的人,我可以通过使用以下代码修改标头来使其工作:

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,
...

在那之后很快就开始工作了=)


推荐阅读