我想为Guzzle编写一个中间件,为form_params
添加一个特定的密钥,并用值填充它。在我已阅读how to modify the headers的文档中,但未找到有关$request
对象的其他属性的任何内容。按照文档中的示例,这就是我所拥有的:
$key = 'asdf';
$stack = new HandlerStack();
$stack->setHandler(new CurlHandler());
$stack->push(Middleware::mapRequest(function (RequestInterface $request) use ($key) {
// TODO: Modify the $request so that
// $form_params['api_key'] == 'default_value'
return $request;
}));
$client = new Client(array(
'handler' => $stack
));
中间件应修改请求,以便:
$client->post('example', array(
'form_params' => array(
'foo' => 'some_value'
)
));
具有与此相同的效果:
$client->post('example', array(
'form_params' => array(
'foo' => 'some_value',
'api_key' => 'default_value'
)
));
答案 0 :(得分:2)
做了类似的事情,我可以说这很容易。
如果你引用GuzzleHttp\Client 在'form_params'输入选项中将数组传递给请求时会发生两件事。首先,在使用http_build query()
进行urlencoded之后,数组的内容成为请求的主体,其次,'Content-Type'标头设置为'x-www-form-urlencoded'
下面的代码段类似于您所寻找的内容。
$stack->push(Middleware::mapRequest(function (RequestInterface $request) {
// perform logic
return new GuzzleHttp\Psr7\Request(
$request->getMethod(),
$request->getUri(),
$request->getHeaders(),
http_build_query($added_parameters_array) . '&' . $request->getBody()->toString()
);
}));