【问题标题】:PHP / No output from cURL request (even with curl_getinfo)PHP / cURL 请求没有输出(即使使用 curl_getinfo)
【发布时间】:2022-01-05 18:06:27
【问题描述】:

我正在尝试从 API 检索数据,虽然我的一个调用工作正常,但所有其他调用最终都没有输出,这使得调试变得困难。

我在我的 cURL 请求中填充了许多这样的参数:

curl_setopt($this->__ch, CURLOPT_URL, $apiUrl );
curl_setopt($this->__ch, CURLOPT_HEADER, 1);
curl_setopt($this->__ch, CURLOPT_USERAGENT, $_SERVER ['HTTP_USER_AGENT']);
curl_setopt($this->__ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($this->__ch, CURLOPT_NOBODY, 1);
curl_setopt($this->__ch, CURLOPT_SSL_VERIFYPEER, 1);
curl_setopt($this->__ch, CURLOPT_SSL_VERIFYHOST, 2);
curl_setopt($this->__ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($this->__ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($this->__ch, CURLOPT_VERBOSE, true);
curl_setopt($this->__ch, CURLOPT_VERBOSE, 1);
// only when access token is available
curl_setopt($this->__ch, CURLOPT_HTTPHEADER, "access-token:XXXX"); 
$result = curl_exec($this->__ch);
$info = curl_getinfo($this->__ch);

如果我对 $this 使用以下内容,它会起作用:

BanggoodAPI Object
(
[__apiKey:BanggoodAPI:private] => ******
[__apiSecret:BanggoodAPI:private] => ******
[__domain:BanggoodAPI:private] => https://affapi.banggood.com/
[__accessToken:BanggoodAPI:private] => 
[__task:BanggoodAPI:private] => getAccessToken
[__method:BanggoodAPI:private] => GET
[__params:BanggoodAPI:private] => Array
    (
        [api_key] => ******
        [noncestr] => ******
        [timestamp] => ******
        [signature] => ******
    )

[__lang:BanggoodAPI:private] => en-GB
[__currency:BanggoodAPI:private] => USD
[__waitingTaskInfo:BanggoodAPI:private] => Array
    (
        [task] => coupon/list
        [method] => GET
        [params] => Array
            (
                [category_id] => 0
                [type] => 2
            )

    )

[__ch:BanggoodAPI:private] => Resource id #1
[__curlExpireTime:BanggoodAPI:private] => 10
)

我得到一个 JSON 作为回报,这是预期的行为。

如果我随后使用以下对象,我将一无所获:

 BanggoodAPI Object
(
[__apiKey:BanggoodAPI:private] => ******
[__apiSecret:BanggoodAPI:private] => ******
[__domain:BanggoodAPI:private] => https://affapi.banggood.com/
[__accessToken:BanggoodAPI:private] => ******
[__task:BanggoodAPI:private] => coupon/list
[__method:BanggoodAPI:private] => GET
[__params:BanggoodAPI:private] => Array
    (
        [category_id] => 0
        [type] => 2
        [lang] => en-GB
        [currency] => USD
    )

[__lang:BanggoodAPI:private] => en-GB
[__currency:BanggoodAPI:private] => USD
[__waitingTaskInfo:BanggoodAPI:private] => Array
    (
    )

[__ch:BanggoodAPI:private] => Resource id #1
[__curlExpireTime:BanggoodAPI:private] => 10
)

如果我尝试在浏览器中直接访问 cURL 目标并在标头中添加访问令牌,它工作得非常好,这意味着端点正在工作并且我的 PHP 存在问题。

对于第二个对象,$result 是空的,$info 也是空的。就像请求被完全忽略了一样。假设端点在所有情况下都会给我一个 json(例如:告诉我有错误)。

你有什么想法可以解释为什么输出是空的吗?还是会迫使 PHP 向我提供有关正在发生的事情的更多信息?

谢谢!

【问题讨论】:

    标签: php curl php-curl


    【解决方案1】:

    考虑使用像邮递员https://www.postman.com 这样的端点测试器。这应该告诉你请求有什么问题。

    此外,您可以将选项 CURLOPT_NOBODY 设置为 1,尝试不使用它。您还可以删除多余的 CURLOPT_SSL_VERIFYPEER 和 CURLOPT_VERBOSE。在 curl 文档中,您对每个 curl 选项都有描述 https://www.php.net/manual/en/book.curl

    【讨论】:

    • 谢谢,我已经尝试过不使用其他选项,但并没有解决问题。真的很奇怪,我也在其他服务器上试过这个脚本,结果一样。我用邮递员试试,谢谢!
    猜你喜欢
    • 1970-01-01
    • 2019-12-22
    • 1970-01-01
    • 2022-10-24
    • 1970-01-01
    • 2022-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-29
    相关资源
    最近更新 更多