Закодированный знак доллара в form_params приводит к игнорированию $top, $skip и $skipToken

Я пытаюсь реализовать разбиение на страницы при доступе к сведениям о виртуальной машине через API Azure Resource Graph. Когда я использую $top и $skip, я все равно получаю все результаты, как если бы эти параметры не были установлены. Я думаю, что знак доллара в обеих переменных кодируется, и поэтому Azure API их игнорирует. Когда я использую HTTP-клиент PHPStorm, я получаю нужные результаты.

$client = new GuzzleHttp\Client();
$response = $client->request(
    'POST',
    'https://management.azure.com/providers/Microsoft.ResourceGraph/resources?api-version=2019-04-01',
    [
        'headers' => [
            'Accept' => 'application/json',
            'Authorization' => "Bearer {$authorization_token}",
        ],
        'form_params' => [
            'query'         => "where type =~ 'Microsoft.Compute/VirtualMachines' | project id, name, location, resourceGroup, tags, vmId=properties.vmId, vmSize=properties.hardwareProfile.vmSize, networkInterfaces=properties.networkProfile.networkInterfaces",
            'options'       => [
                '$top'  => 25,
                '$skip' => 0,
            ],
            'subscriptions' => [
                $subscription_id,
            ]
        ],
    ]
);

Есть ли лучший способ передать эти данные в Guzzle, чтобы эти конкретные переменные не кодировались?

РЕДАКТИРОВАТЬ: Добавление сведений о HTTP-клиенте PHPStorm:

POST https://management.azure.com/providers/Microsoft.ResourceGraph/resources?api-version=2019-04-01
Cache-Control: no-cache
Accept: application/json
Authorization: Bearer <token>
Content-Type: application/json

{
  "subscriptions": [
    "<subscription>"
  ],
  "query": "where type =~ 'Microsoft.Compute/VirtualMachines' | project id, name, location, resourceGroup, tags, vmId=properties.vmId, vmSize=properties.hardwareProfile.vmSize, networkInterfaces=properties.networkProfile.networkInterfaces",
  "options": {
    "$top": 25,
    "$skip": 0
  }
}

person Adam    schedule 06.05.2019    source источник
comment
Когда вы используете клиент PHPstorm, он отправляет данные в формате JSON или в форме?   -  person Sammitch    schedule 07.05.2019
comment
Я отправляю его в кодировке JSON.   -  person Adam    schedule 07.05.2019
comment
Тогда не используйте form_params, используйте json.   -  person Sammitch    schedule 07.05.2019
comment
Вот чего мне не хватало. Благодарю вас!   -  person Adam    schedule 07.05.2019


Ответы (1)


Благодаря sammitch исправленный код:

$client = new GuzzleHttp\Client();
$response = $client->request(
    'POST',
    'https://management.azure.com/providers/Microsoft.ResourceGraph/resources?api-version=2019-04-01',
    [
        'headers' => [
            'Accept' => 'application/json',
            'Authorization' => "Bearer {$authorization_token}",
        ],
        'json' => [
            'query'         => "where type =~ 'Microsoft.Compute/VirtualMachines' | project id, name, location, resourceGroup, tags, vmId=properties.vmId, vmSize=properties.hardwareProfile.vmSize, networkInterfaces=properties.networkProfile.networkInterfaces",
            'options'       => [
                '$top'  => 25,
                '$skip' => 0,
            ],
            'subscriptions' => [
                $subscription_id,
            ]
        ],
    ]
);
person Adam    schedule 07.05.2019