将CURLOPT_HTTPHEADER与Object一起使用

问题描述 投票:2回答:1

当使用PHP的curl API时,如果我不小心使用带有CURLOPT_HTTPHEADER卷曲选项的字符串

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一个对象。这可能吗?

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

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

php libcurl
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']));
© www.soinside.com 2019 - 2024. All rights reserved.