2

使用 PHP 的 curl API 时,如果我不小心使用了带有CURLOPT_HTTPHEADERcurl 选项的字符串

curl_setopt($ch, CURLOPT_HTTPHEADER, 'User-Agent: php-curl');

PHP会骂我

警告:curl_setopt():您必须在第 32 行的 /path/to/test.php 中传递带有 CURLOPT_HTTPHEADER 参数的对象或数组

我知道我可以使用数组来解决这个问题

$headers = [];
$headers[] = 'User-Agent: php-curl';
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);

但是,警告似乎表明我也可以传递curl_setopt一个对象。这可能吗?

我已经尝试过使用stdClassand ArrayObject,但似乎都不起作用。这只是一个误导性的警告信息,还是有办法curl_setopt与对象一起使用?

更新原来我安装了一个阻止标准行为的 PHP 扩展。ArrayObjects 在这个函数中工作正常。我无法关闭或删除此问题,因此希望此警告可以避免混淆。

4

1 回答 1

1

您需要传递一个实现JsonSerializable的对象。

class Testing implements JsonSerializable
{
    protected $headers = [];

    public function __construct($headers)
    {
        $this->headers = $headers;
    }

    public function jsonSerialize()
    {
        return $this->headers;
    }
}

然后你可以将它传递给你的CURLOPT_HTTPHEADER参数:

$ch = curl_init();
curl_setopt($ch, CURLOPT_HTTPHEADER, new Testing(['User-Agent: php-curl']));
于 2019-02-28T19:11:14.770 回答