По умолчанию form_params для жрет 6

Есть ли способ глобально добавить form_params ко всем запросам с помощью guzzle 6?

Например:

$client = new \GuzzleHttp\Client([
    'global_form_params' => [ // This isn't a real parameter 
        'XDEBUG_SESSION_START' => '11845',
        'user_token' => '12345abc',
    ]
]);

$client->post('/some/web/api', [
    'form_params' => [
        'some_parameter' => 'some value'
    ]
]);

В моем идеальном мире post будет иметь результат array_merge-ing global_form_params а также form_params:

[
    'XDEBUG_SESSION_START' => '11845',
    'user_token' => '12345abc',
    'some_parameter' => 'some value',
]

Я также вижу желание что-то подобное для query или же json

1 ответ

В соответствии с разделом "Создание клиента" вы можете установить "любое количество параметров запроса по умолчанию" и в GuzzleHttp\Client Source Code.

$client = new Client['form_params' => [form values],]);

будет применять ваши form_params к каждому запросу.

Это может создать проблемы с запросами GET из-за Content-Type заголовок изменяется в Client:: applyOptions. В конечном итоге это будет зависеть от конфигурации сервера.

Если ваши намерения состоят в том, чтобы клиент отправлял запросы как GET, так и POST, то вам лучше обойтись, переместив form_params в промежуточное ПО. Например:

$stack->push(\GuzzleHttp\Middleware::mapRequest(function (RequestInterface $request) {
    if ('POST' !== $request->getMethod()) {
        // pass the request on through the middleware stack as-is
        return $request;
    }

    // add the form-params to all post requests.
    return new GuzzleHttp\Psr7\Request(
        $request->getMethod(),
        $request->getUri(),
        $request->getHeaders() + ['Content-Type' => 'application/x-www-form-urlencoded'],
        GuzzleHttp\Psr7\stream_for($request->getBody() . '&' . http_build_query($default_params_array)),
        $request->getProtocolVersion()
    );  
});
Другие вопросы по тегам