使用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
一个对象。这可能吗?
我尝试同时使用 stdClass
和ArrayObject
,但似乎都没有用。这仅仅是误导性的警告消息,还是有办法对对象使用curl_setopt
?
更新原来,我安装了一个PHP扩展,阻止了标准行为。 ArrayObjects在此函数中可以正常工作。我无法关闭或删除此问题,因此希望此警告可以避免造成混淆。
答案 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']));