4

我正在尝试发送一个 POST 请求,其中包含带有以下标头的原始 JSON 字符串:Content-Type: application/json.

通过查看文档,我可以看到我可以做这样的事情......

$data = ['x' => 1, 'y' => 2, 'z' => 3];
$client = new \GuzzleHttp\Client($guzzleConfig);
$options = [
    'json' => $data,
];
$client->post('http://example.com', $options);

我的问题是,当我到达这一点时,$data已经json_encode'd。

我尝试了以下方法,但它不起作用。

$data = json_encode(['x' => 1, 'y' => 2, 'z' => 3]);
$client = new \GuzzleHttp\Client($guzzleConfig);
$options = [
    'body' => $data,
    'headers' => ['Content-Type' => 'application/json'],
];
$client->post('http://example.com', $options);

我的问题是:我可以将该json选项与已编码的数组一起使用吗?或者有没有办法让我简单地设置Content-Type标题?

4

2 回答 2

4

根据 guzzle 的文档http://docs.guzzlephp.org/en/latest/request-options.html#json

您可以将已经编码的json直接传递到body参数中

注意 此请求选项不支持自定义 Content-Type 标头或 PHP 的 json_encode() 函数中的任何选项。如果您需要自定义这些设置,则必须使用正文请求选项自己将 JSON 编码数据传递到请求中,并且必须使用 headers 请求选项指定正确的 Content-Type 标头。

此选项不能与 body、form_params 或 multipart 一起使用

于 2016-04-18T15:20:43.007 回答
0

Guzzle 还提供了json Request 选项,它将自动对您的内容进行编码并设置Content-Type标题。更多信息在链接。事实上,提供的示例使用了 PUT 请求。

$response = $client->request('PUT', '/put', ['json' => ['foo' => 'bar']]);
于 2016-04-18T21:31:10.630 回答