You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将指定curl请求转换为GuzzleHttp请求并解决上传报错问题

问题原因

你当前的代码存在三处核心错误:

  • 原始curl请求采用multipart/form-data表单格式提交数据,你使用Guzzle的json参数会发送application/json格式的请求,完全不匹配接口要求
  • 你没有按接口要求单独提交文件字段,将文件路径写入JSON结构的传递方式无效,接口无法识别到上传的文件
  • 接口要求的Verb参数值为UploadModelRelease,你的代码里误写为UploadRelease
修正后的代码
$client = new \GuzzleHttp\Client();

// 构造Request字段的JSON内容
$requestData = json_encode([
    'APIRequests' => [
        [
            "Verb" => "UploadModelRelease", // 修正Verb参数值
            "AuthToken" => $this->getAccessToken(),
            "FirstName" => $firstName,
            "LastName" => $lastName,
            "Gender" => $gender,
            "Country" => $country,
            "AgeGroup" => $ageGroup,
            "Ethnics" => $ethnics,
        ],
    ]
]);

$response = $client->request('POST', "https://api2.dreamstime.com/api/", [
    'allow_redirects' => true, // 对应curl的-L参数,允许重定向
    'multipart' => [
        // 第一个表单字段:Request,值为JSON字符串
        [
            'name' => 'Request',
            'contents' => $requestData
        ],
        // 第二个表单字段:PropertyRelease,上传文件
        [
            'name' => 'PropertyRelease',
            'contents' => \GuzzleHttp\Psr7\Utils::tryFopen($file, 'r'), // $file为本地文件绝对路径
            'filename' => basename($file) // 可选,指定上传的文件名
        ]
    ]
]);
注意事项
  • 请确保$file变量为本地文件的绝对路径,且PHP进程对该文件有读取权限
  • 若接口要求的文件字段名为ModelRelease而非PropertyRelease,只需要修改第二个表单字段的name值对应即可

内容的提问来源于stack exchange,提问作者Xch0

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 14:57:01