Получение данных URL, когда Content-Range отправляется в PHP - PullRequest
1 голос
/ 23 января 2011

Существует множество вариантов загрузки URL в PHP - но я застрял.

Я просмотрел все те, что знаю, но, похоже, ни один из них не обращает внимания на частичные заголовки контента.

Я пытаюсь получить URL-адрес, который дает следующий заголовок: HTTP / 1.1 206 Частичное содержимое Content-Range: байты 0-100000 / 631723

Как вы можете видеть, файл разбирается в100 000 байтов.

Проблема в том, что когда я использую какой-либо метод в PHP, например, file_get_contents, fopen или даже cURL, ни один из них не продолжается после получения первых 100 000 байтов.

Конечный результат, У меня есть файл размером 100 000 байт.

Что мне нужно, чтобы получить PHP-скрипт для захвата всех данных, в приведенном выше примере, всех 631 723 байта.

Как я могу это сделать?

Ответы [ 2 ]

0 голосов
/ 23 января 2011

Попробуйте отправить его с помощью HTTP/1.0, который не определил запросы диапазона содержимого (и другое кэширование и прокси tohuwabohu).Таким образом, вы гарантируете получение полного файла.

Если вы хотите использовать для этого file_get_contents, то установите параметр protocol_version с помощью stream_context_create().

0 голосов
/ 23 января 2011

Если вы получаете ответ 206 Partial Content, то вы должны включить поле заголовка Range, указывающее желаемый диапазон в вашем запросе:

например

GET /2390/2253727548_a413c88ab3_s.jpg HTTP/1.1
Host: farm3.static.flickr.com
Range: bytes=0-999

или где-то есть прокси-сервер, который разбивает запросы на серию запросов диапазона

EDIT

В качестве разрешения вы можетехотите попробовать отправить серию запросов с использованием диапазона получения, а затем соединить их все вместе, как вы получаете каждый ответ

РЕДАКТИРОВАТЬ 2

Если есть прокси, который ломаетсязапрос, чтобы вы получили серию ответов, вы, вероятно, обрабатываете только первый.Возможно, вы сможете использовать CURLOPT_WRITEFUNCTION для регистрации обратного вызова, который вызывается при получении каждого ответа на данные и который затем может управлять соединением различных кусков.

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