Есть ли способ глобально добавить 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
В соответствии с Создание клиента Вы можете установить «любое количество параметров запроса по умолчанию» и на 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()
);
});
Других решений пока нет …