Использование CURLOPT_HTTPHEADER с объектом - PullRequest
0 голосов
/ 28 февраля 2019

При использовании PHP curl API, если я случайно использую строку с опцией CURLOPT_HTTPHEADER curl

curl_setopt($ch, CURLOPT_HTTPHEADER, 'User-Agent: php-curl');

PHP будет ругать меня

Предупреждение: curl_setopt ():Вы должны передать объект или массив с аргументом CURLOPT_HTTPHEADER в /path/to/test.php в строке 32

Я знаю, что это можно исправить с помощью массива

$headers = [];
$headers[] = 'User-Agent: php-curl';
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);

Однако, как представляется, предупреждение указывает на то, что я также могу передать curl_setopt объект.Это возможно?

Я пробовал и с stdClass, и с ArrayObject, но ни один из них не работает.Это только вводящее в заблуждение предупреждающее сообщение или есть способ использовать curl_setopt с объектом?

Обновление Оказывается, у меня установлено расширение PHP, которое блокировалостандартное поведение.ArrayObjects отлично работают в этой функции.Я не могу закрыть или удалить этот вопрос, поэтому, надеюсь, это предупреждение поможет избежать путаницы.

1 Ответ

0 голосов
/ 28 февраля 2019

Вам нужно передать объект, который реализует 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']));
...