cURL GET 请求忽略我的数据输入

cURL GET request ignoring my data input

我正在尝试使用 PHP 和 cURL 获取有关 Cloudflare 防火墙中特定 IP 的信息。

但是下面的请求总是returns所有防火墙中设置的IP。

是否无法将 CURLOPT_POSTFIELDS 用于 GET 请求?

如何使用 PHP 和 cURL 正确构建 GET 请求,该请求具有包含要请求的数据的数组?

$ch = curl_init();
curl_setopt( $ch, CURLOPT_URL, $this->settings['cloudflare_rules_url'] );
curl_setopt( $ch, CURLOPT_RETURNTRANSFER, 1 );
curl_setopt( $ch, CURLOPT_VERBOSE, 1 );

curl_setopt( $ch, CURLOPT_CUSTOMREQUEST, 'GET' );

$headers = [
    'X-Auth-Email: ' . $this->settings['x_auth_email'],
    'X-Auth-Key: ' . $this->settings['x_auth_key'],
    'Content-Type: application/json',
];

curl_setopt( $ch, CURLOPT_HTTPHEADER, $headers );

$search_filter = array(
    'configuration_target' => 'ip', 
    'configuration_value' => '123.123.123.123',

);

curl_setopt( $ch, CURLOPT_POSTFIELDS, json_encode( $search_filter ) );

$result = curl_exec( $ch );

curl_close( $ch );

error_log( print_r( json_decode( $result, true ), true ) );

我找到了答案,但我不确定这是否是最优雅的方式。

解决方案是 url 将查询数组参数编码为 CURLOPT_URL。

$search_filter = array(
    'configuration_target' => 'ip', 
    'configuration_value' => '123.123.123.123',

);

curl_setopt( $ch, CURLOPT_URL, $this->settings['cloudflare_rules_url'] . '/?' . http_build_query( $search_filter ));