Метод класса PHP с закрытием заголовков CURL - PullRequest
0 голосов
/ 28 января 2019

У меня есть класс ниже, чтобы проанализировать URL

<?php
class URLFetcher {
    private $ch;
    private $url = '';

    public function __construct(string $url) {
        $this->url = $url;
    }

    public function fetch(): URLFetcher {
        $headers = [];
        $this->ch = curl_init($this->url);
        curl_setopt_array($this->ch, [
            CURLOPT_RETURNTRANSFER => true,
            CURLOPT_USERAGENT => 'Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:64.0) Gecko/20100101 Firefox/64.0',
            CURLOPT_HEADERFUNCTION => function($curl, $header) use (&$headers) {
                var_dump($header);
                $header2 = trim($header);
                if($header2 !== '') $headers[] = $header2;
                return strlen($header);
            }
        ]);
        exit(var_dump($headers));
        return $this;
    }
}
?>

Я использую var_dump в закрытии, чтобы увидеть заголовки, как они приходят из CURL, и в конце я используюСнова var_dump, чтобы увидеть все заголовки.

Проблема в том, что в функции нет печатных заголовков, и в конце $ headers печатает пустой массив.

Если я это сделаюэто без класса, все работает правильно.У меня вопрос, что мне не хватает, и код не работает?Я предполагаю, что это связано с закрытием.

1 Ответ

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

Вы просто забыли curl_exec($this->ch); в конце метода.

public function fetch(): URLFetcher {
    $headers = [];
    $this->ch = curl_init($this->url);
    curl_setopt_array($this->ch, [
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_USERAGENT => 'Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:64.0) Gecko/20100101 Firefox/64.0',
        CURLOPT_HEADERFUNCTION => function($curl, $header) use (&$headers) {
            $header2 = trim($header);
            if($header2 !== '') $headers[] = $header2;
            return strlen($header);
        }
    ]);

    curl_exec($this->ch);

    exit(var_dump($headers));
    return $this;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...