有没有办法阻止 Guzzle 在 POST 请求中将 [] 附加到具有多个值的字段名称?
Is there a way to prevent Guzzle from appending [] to field names with multiple values in a POST request?
当使用 Guzzle POST 具有多个值的字段时,括号会附加到字段名称:
<?php
$client = new \GuzzleHttp\Client([
'base_uri' => 'https://www.example.com/test',
'headers' => [
'Content-Type' => 'application/x-www-form-urlencoded',
],
);
$client->request('POST', '', [
'form_params' => [
'foo' => [
'hello',
'world',
],
],
]);
Guzzle 将此数据发送为 foo[0]=hello&foo[1]=world
。有没有办法省略括号,以便数据作为 foo=hello&foo=world
发送? Google 例如,如果包含方括号,则 returns 形成 400 错误响应。
目前无法通过 post_params
使用自动编码来实现这一点,因此如果您需要这种格式,您必须提供自己的原始 POST 正文。
幸运的是,GuzzleHttp\Psr7\Query
中有一个非常有用的功能(如果您需要通过 composer guzzle,它应该会自动安装),名为 build
,它正是您所需要的。
use GuzzleHttp\Psr7\Query;
$client = new \GuzzleHttp\Client([
'base_uri' => 'https://www.example.com/test',
'headers' => [
'Content-Type' => 'application/x-www-form-urlencoded',
]
]);
$client->request('POST', '', [
'body' => Query::build([
'foo' => [
'hello',
'world',
],
]),
]);
当使用 Guzzle POST 具有多个值的字段时,括号会附加到字段名称:
<?php
$client = new \GuzzleHttp\Client([
'base_uri' => 'https://www.example.com/test',
'headers' => [
'Content-Type' => 'application/x-www-form-urlencoded',
],
);
$client->request('POST', '', [
'form_params' => [
'foo' => [
'hello',
'world',
],
],
]);
Guzzle 将此数据发送为 foo[0]=hello&foo[1]=world
。有没有办法省略括号,以便数据作为 foo=hello&foo=world
发送? Google 例如,如果包含方括号,则 returns 形成 400 错误响应。
目前无法通过 post_params
使用自动编码来实现这一点,因此如果您需要这种格式,您必须提供自己的原始 POST 正文。
幸运的是,GuzzleHttp\Psr7\Query
中有一个非常有用的功能(如果您需要通过 composer guzzle,它应该会自动安装),名为 build
,它正是您所需要的。
use GuzzleHttp\Psr7\Query;
$client = new \GuzzleHttp\Client([
'base_uri' => 'https://www.example.com/test',
'headers' => [
'Content-Type' => 'application/x-www-form-urlencoded',
]
]);
$client->request('POST', '', [
'body' => Query::build([
'foo' => [
'hello',
'world',
],
]),
]);