繁体   English   中英

将 CURLOPT_HTTPHEADER 与对象一起使用

[英]Using CURLOPT_HTTPHEADER with an Object

使用 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 在这个函数中工作正常。 我无法关闭或删除这个问题,所以希望这个警告能避免混淆。

您需要传递一个实现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']));

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM