使用Pool of Guzzle PHP库发送请求时,为什么没有正确处理西里尔字符?

时间:2018-01-22 12:51:01

标签: php api guzzle cyrillic

我正在使用Guzzle将请求发送到外部API端点。

在我的请求中,有一个文本查询值 - ' https://api_endpoint/' 。 '文本=' 。$文本

当我逐个发送请求时:

$response = $client->request(
            'GET',
            ''https://api_endpoint/' . '?text=' .$text,
        );

它适用于文本字段中的任何语言。但是,当我第一次迭代另一个查询值并创建一个请求数组,然后使用Pool发送这些请求时:

$responses = Pool::batch($client, $requests, array(
        'concurrency' => 15,
    ));

在这种情况下,如果请求中的文本字段是用西里尔语编写的,那么我从API端点收到“错误请求”。但是,如果文本字段是拉丁字符,则一切正常。我一个接一个地发送请求的情况也一样。

我认为使用Guzzle Pool时编码存在问题。

如何修复或解决此问题?

1 个答案:

答案 0 :(得分:1)

这不是Guzzle的问题。在连接之前,您必须urlencode $texturlencode($text)或使用Guzzle的query选项:

$response = $client->request(
    'GET',
    'https://api_endpoint/',
    ['query' => ['text' => $text]],
);