有没有办法阻止 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',
        ],
    ]),
]);