我看过this answer但是我相信有更好的方法在Guzzle中创建一个http url查询,我正在寻找这样的东西,但是无法让它正常工作,我也不知道是否有转储url字符串以查看它是否正确处理的方法。有人能告诉我这样做的正确方法吗?
// works correctly
$client = New GuzzleHttp\Client();
$request = $client->get('http://192.168.50.8/foo?-db=database&-lay=layout&-find');
print_r($request->getBody());
不起作用
$request = $client->get($config->Layout['server'], [], [
'query' => [
$config->Layout['switches'], // ([ '-db' => 'database', '-lay' => 'layout', '-find' => true)
$config->Layout['options'], // other params
]
]);
答案 0 :(得分:23)
我有同样的问题。我找到了解决方案
public static function getGroupList($current=false) {
$response = self::getRestClient()->get(
[
'domains/{domainId}/pricelists',
['domainId' => self::getDomainId()]
],
[
'query' => [
current => $current
]
]
);
return new RestResponse($response);
尝试
$response = $client->get(
[
$config->Layout['server'],
[]
],
[
'query' => [
$config->Layout['switches'], // ([ '-db' => 'database', '-lay' => 'layout', '-find' => true)
$config->Layout['options'], // other params
]
]
);
答案 1 :(得分:3)
正确答案的另一种形式:
$params = [
'query' => [
'option_1' => string,
'option_2' => string
]
];
然后调用您的请求:
$response = $guzzle_client->request('GET','/api.com',$params);
答案 2 :(得分:-1)
有一种更好的方法可以在Guzzle中创建http url查询。此示例遵循Guzzle架构和文档的最佳做法。 看看Guzzle documentaton https://docs.guzzlephp.org/en/stable/request-options.html,您可以看到它具有RequestOptions。 RequestOptions是常量。它们在GuzzleHttp \ RequestOptions中定义。您可以查看类源代码,然后在此处查看所有源代码。因此,为了保持良好且专业的编程风格,您可以编写以下源代码,例如
use GuzzleHttp\Client;
use GuzzleHttp\RequestOptions;
class DataClass extends BaseClass
{
const DEFAULT_ACCEPT_HEADER = 'application/json';
const DEFAULT_CACHE_HEADER = 'no-cache';
private function getData(array $ids)
{
$client = new Client([
'base_uri' => env("HTTP_HOST"),
'timeout' => env("TIMEOUT")
]
);
$response = $client->request('GET', env('ENDPOINT'),
[
RequestOptions::HEADERS => [
'Accept' => self::DEFAULT_ACCEPT_HEADER,
'Cache-Control' => self::DEFAULT_CACHE_HEADER,
],
RequestOptions::QUERY => [
'ids' => implode(',', $ids),
'stats' => 1
]
]
);
return json_decode($response->getBody(), JSON_OBJECT_AS_ARRAY);
}
答案 3 :(得分:-1)
此示例使用与原始问题相同的变量。 唯一的env(“ TIMEOUT”)是某些.env文件中描述的变量,可以用常量替换。这就是它应该如何工作的。如果在您的情况下不起作用,则可能是问题出在其他地方
$client = new Client([
'base_uri' => $config->Layout['server'],
'timeout' => env("TIMEOUT")
]
);
$response = $client->request('GET', $config->Layout['url'],
[
RequestOptions::QUERY => array_merge(
$config->Layout['switches'],
$config->Layout['options']
)
]
);