Sae*_*ven 5 php guzzle guzzle6
从 5 迁移到 6,我遇到了一个障碍,找不到相关的文档。
Guzzle 文档在这里,http: //guzzle.readthedocs.io/en/latest/quickstart.html#creating-a-client ,我们可以添加“任意数量的默认请求选项”的站点。
我想在每个请求中发送“foo=bar”。例如:
$client = new Client([
'base_uri' => 'http://google.com',
]);
$client->get('this/that.json', [
'query' => [ 'a' => 'b' ],
]);
Run Code Online (Sandbox Code Playgroud)
这将在http://google.com/this/that.json?a=b上生成 GET
如何修改客户端构造以使其产生:
http://google.com/this/that.json?foo=bar&a=b
谢谢你的帮助!
好的,到目前为止,这在这里工作:
$extraParams = [
'a' => $config['a'],
'b' => $config['b'],
];
$handler = HandlerStack::create();
$handler->push(Middleware::mapRequest(function (RequestInterface $request) use ($extraParams) {
$uri = $request->getUri();
$uri .= ( $uri ? '&' : '' );
$uri .= http_build_query( $extraParams );
return new Request(
$request->getMethod(),
$uri,
$request->getHeaders(),
$request->getBody(),
$request->getProtocolVersion()
);
}));
$this->client = new Client([
'base_uri' => $url,
'handler' => $handler,
'exceptions' => false,
]);
Run Code Online (Sandbox Code Playgroud)
如果有人知道如何使它看起来不那么险恶,我会说谢谢!
我在这里找到了一个很好的解决方案。
基本上,第一个参数数组中定义的任何内容都将成为config客户端的一部分。
这意味着您可以在初始化时执行以下操作:
$client = new Client([
'base_uri' => 'http://google.com',
// can be called anything but defaults works well
'defaults' => [
'query' => [
'foo' => 'bar',
]
]
]);
Run Code Online (Sandbox Code Playgroud)
然后,在使用客户端时:
$options = [
'query' => [
'nonDefault' => 'baz',
]
];
// merge non default options with default ones
$options = array_merge_recursive($options, $client->getConfig('defaults'));
$guzzleResponse = $client->get('this/that.json', $options);
Run Code Online (Sandbox Code Playgroud)
值得注意的是array_merge_recursive函数附加到嵌套数组而不是覆盖。如果您计划更改默认值,则需要不同的实用函数。当默认值不可变时,它可以很好地工作。
| 归档时间: |
|
| 查看次数: |
2133 次 |
| 最近记录: |