卷曲到 GuzzleHttp 请求

Curl to GuzzleHttp request

我收到了以下 curl 请求:

curl -H "Content-Type:application/json" -H "Api-Key:someapikey" -X -d {"address":"30598 West Street","city":"Oakdale"}' PUT "https://somedomain/api/members/1234567"

我正在尝试用 GuzzleHttp 复制它,如下所示:

$headers = [
    'Api-Key'      => $this->apiKey,
    'Content-Type' => 'application/json',
];
$client = new Client([
    'headers' => $headers,
]);
$res = $client->put("{$this->baseUrl}/members/{$fields['vip_id']}", [
    'form_params' => $fields,
]);

我不断收到 415 Unsupported Media Type 响应。从我得到的卷曲来看,我想我已经涵盖了所有的基础。但是,当我调试时,它显示我的内容类型设置为 application/x-www-form-urlencoded。根据文档,仅当尚未设置 Content-Type header 且包含 form_params 时,才会将 header 设置为此。因为我已经设置了这个header,它应该不会切换吧?请帮忙!

您的 header 被覆盖的原因是请求的 form_params 选项专门用于发送 x-www-form-urlencoded 数据。

您可以完全省略选项中的 Content-Type header,而是在请求中使用 json 键发送 JSON 数据。

$headers = [
    'Api-Key'      => $this->apiKey,
];
$client = new Client([
    'headers' => $headers,
]);
$res = $client->put("{$this->baseUrl}/members/{$fields['vip_id']}", [
    'json' => $fields, // causes Guzzle to set content type to application/json
                       // and json_encode your $fields
]);