Возникли проблемы с ограничением размера загрузки функции PHP cURL - PullRequest
11 голосов
/ 07 августа 2010

Я использую функцию cURL в PHP для чтения профилей с сайта steampowered.com. Полученные данные представляют собой XML, и нужны только первые примерно 1000 байтов.

Я использую метод, чтобы добавить заголовок Range, который я прочитал в ответе переполнения стека ( curl: Как ограничить размер GET? ). Другой метод, который я попробовал, использовал curlopt_range, но он тоже не работал.

<?
$curl_url = 'http://steamcommunity.com/id/edgen?xml=1';
$curl_handle = curl_init($curl_url);

curl_setopt ($curl_handle, CURLOPT_RETURNTRANSFER, 1);
curl_setopt ($curl_handle, CURLOPT_CONNECTTIMEOUT, 2);
curl_setopt ($curl_handle, CURLOPT_HTTPHEADER, array("Range: bytes=0-1000"));

$data_string = curl_exec($curl_handle);

echo $data_string;

curl_close($curl_handle);
?>

Когда этот код выполняется, он возвращает все.

Я использую PHP версии 5.2.14.

1 Ответ

18 голосов
/ 07 августа 2010

Сервер не учитывает заголовок Range.Лучшее, что вы можете сделать, это отменить соединение, как только вы получите больше данных, чем вы хотите.Пример:

<?php
$curl_url = 'http://steamcommunity.com/id/edgen?xml=1';
$curl_handle = curl_init($curl_url);

$data_string = "";
function write_function($handle, $data) {
    global $data_string;
    $data_string .= $data;
    if (strlen($data_string) > 1000) {
        return 0;
    }
    else
        return strlen($data);
}

curl_setopt ($curl_handle, CURLOPT_RETURNTRANSFER, 1);
curl_setopt ($curl_handle, CURLOPT_CONNECTTIMEOUT, 2);
curl_setopt ($curl_handle, CURLOPT_WRITEFUNCTION, 'write_function');

curl_exec($curl_handle);

echo $data_string;

Возможно, более аккуратно, вы можете использовать оболочку http (это также будет использовать curl, если он был скомпилирован с --with-curlwrappers).Обычно вы вызываете fread в цикле, а затем fclose в потоке, когда получаете больше данных, чем хотели.Вы также можете использовать транспортный поток (откройте поток с fsockopen вместо fopen и отправьте заголовки вручную), если allow_url_fopen отключен.

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