PHP: Как я могу получить содержимое веб-страницы, используя HTTP? - PullRequest
0 голосов
/ 26 сентября 2019

Я пишу скрипт для загрузки содержимого большой группы страниц, чтобы я мог применить к ним свой алгоритм подсчета очков.Мне удалось установить соединение и отправить HTTP-запрос, но я не получил никакого ответа, даже код состояния.

Вот мой код:

function getWebPage($host, $page, $fname = null)
{
    // Open and connect the socket
    $remotePort = getservbyname('www', 'tcp');
    // $remotePort = $HTTPSPORT;
    $ipaddr = isinteger($host) : $host ? gethostbyname($host);
    $socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
    if ($socket === false) {
        $errmsg = socket_strerror(socket_last_error());
        echo "main file: couldn't get socket: $errmsg\n";
        return false;
    }
    $result = socket_connect($socket, $ipaddr, $remotePort);
    if ($result == false) {
        $errmsg = socket_strerror(socket_last_error($socket));
        echo "$host: connect failed: $errmsg\n";
        return false;
    }

    // Send the request
    $request = "GET $page HTTP/1.1\r\n";

    $rc = socket_write($socket, $request, strlen($request));

    // read the response
    $response = "";
    while (true) {
        $s = socket_read($socket, 2048);    <---------------------------------------------------------
        if ($s === false) {
            break;
        }
        $response = "$response$s";
    }

}

Сценарийзависает при вызове socket_read, указанном <--------------------------------------------------------- </p>

Я озадачен.ISTM, что даже если у меня есть ошибка в моем запросе или если хост требует HTTPS, я должен по крайней мере получить код результата (200 будет успешным, и я проверю это).

ПРИМЕЧАНИЕ. Описаниефункции сокета утверждают, что вам нужно пересобрать PHP с --enable-sockets при конфигурировании.Но я нашел extension=php_sockets.dll закомментированный в php.ini, и я раскомментировал его.Затем скрипт выполнялся без сообщений об ошибках во время выполнения, но зависал на socket_read, как описано выше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...