在PHP中发送Content-Range时检索URL数据

时间:2011-01-22 23:32:58

标签: php curl

有许多选项可用于在PHP中下载URL - 但我被卡住了。

我查看了我所知道的所有内容,但似乎没有人关注部分内容标题。

我正在尝试检索提供以下标头的网址: HTTP / 1.1 206部分内容 内容范围:字节0-100000 / 631723

正如您所看到的那样,它以100,000字节块的形式显示文件。

麻烦的是,当我在PHP中使用任何方法时,即file_get_contents,fopen,甚至cURL,在收到前100,000个字节后,这些方法都不会继续。

最终结果,我有一个100,000字节的文件。

我需要的是让PHP脚本获取所有数据,在上面的例子中,所有631,723字节。

我该怎么做?

2 个答案:

答案 0 :(得分:0)

如果您收到206 Partial Content回复,那么 必须 已包含一个Range标题字段,表示您的请求中所需的范围:

e.g。

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

或者某个地方的代理将请求分解为一系列范围请求

修改

作为一种解决方案,您可能希望尝试使用“获取范围”发送一系列请求,然后在获得每个响应时将它们拼接在一起

编辑2

如果有一个代理正在破坏请求以便您获得一系列响应,那么您可能只处理第一个响应。您可能可以使用CURLOPT_WRITEFUNCTION注册每次收到每个数据响应时调用的回调,然后可以将各个块的回缝一起管理。

答案 1 :(得分:0)

尝试使用HTTP/1.0发送,但未定义内容范围请求(以及其他缓存和代理tohuwabohu)。因此,您确保收到完整的文件。

如果您想使用file_get_contents,请通过protocol_version设置stream_context_create()参数。