将CURLOPT_HTTPHEADER与对象一起使用

时间:2019-02-28 19:01:08

标签: php libcurl

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

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在此函数中可以正常工作。我无法关闭或删除此问题,因此希望此警告可以避免造成混淆。

1 个答案:

答案 0 :(得分: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']));