По умолчанию 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

2

Решение

В соответствии с Создание клиента Вы можете установить «любое количество параметров запроса по умолчанию» и на GuzzleHttp \ Исходный код клиента

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

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

Это может создать проблемы с запросами GET из-за Content-Type заголовок меняется в течение Клиентский :: 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()
);
});
2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]