【问题标题】:cURL GET request ignoring my data inputcURL GET 请求忽略我的数据输入
【发布时间】:2017-07-26 15:00:27
【问题描述】:

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

但以下请求总是返回防火墙中设置的所有 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 ) );

【问题讨论】:

    标签: php curl cloudflare


    【解决方案1】:

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

    解决方案是将查询数组参数通过 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 ));
    

    【讨论】:

    • 是的,如果方法 GET,您必须向 url 添加数据
    • @Matx132 这不是真的。 GET 请求可以有请求体,就像 POST 请求一样。它只是不常见的。为了证明这一点,运行curl -v -X GET --data test=foo example.org 看看,你得到了什么?一个带有请求正文和内容长度的 GET 请求,就像一个 POST 请求:)
    • @hanshenrik 为什么它在我上面的示例中不起作用?是不是因为我用 PHP 来构建请求?
    猜你喜欢
    • 2019-11-30
    • 2019-07-12
    • 1970-01-01
    • 1970-01-01
    • 2013-07-17
    • 2020-05-03
    • 1970-01-01
    • 1970-01-01
    • 2014-02-15
    相关资源
    最近更新 更多