如何在Guzzle中间件中修改参数?

时间:2015-09-29 14:39:51

标签: middleware guzzle

我想为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'
    )
));

1 个答案:

答案 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()
    );

}));