当使用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
一个对象。这可能吗?
我试过用stdClass
和ArrayObject
,但似乎都不起作用。这只是一个误导性的警告信息,还是有办法将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']));