有许多选项可用于在PHP中下载URL - 但我被卡住了。
我查看了我所知道的所有内容,但似乎没有人关注部分内容标题。
我正在尝试检索提供以下标头的网址: HTTP / 1.1 206部分内容 内容范围:字节0-100000 / 631723
正如您所看到的那样,它以100,000字节块的形式显示文件。
麻烦的是,当我在PHP中使用任何方法时,即file_get_contents,fopen,甚至cURL,在收到前100,000个字节后,这些方法都不会继续。
最终结果,我有一个100,000字节的文件。
我需要的是让PHP脚本获取所有数据,在上面的例子中,所有631,723字节。
我该怎么做?
答案 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()
参数。