Python 使用 HTTP 查找远程文件
如何查找远程 (HTTP) 文件上的特定位置以便只能下载该部分?
假设远程文件上的字节为: 1234567890
我想查找 4 并从那里下载 3 个字节,这样我就会得到: 456
另外,如何检查远程文件是否存在? 我尝试过 os.path.isfile() 但当我传递远程文件 url 时它返回 False 。
How do I seek to a particular position on a remote (HTTP) file so I can download only that part?
Lets say the bytes on a remote file were: 1234567890
I wanna seek to 4 and download 3 bytes from there so I would have: 456
and also, how do I check if a remote file exists?
I tried, os.path.isfile() but it returns False when I'm passing a remote file url.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
如果您通过 HTTP 下载远程文件,则需要设置
Range
标头。检查在此示例中如何完成。看起来像这样:
编辑:我刚刚找到了一个更好的实现。这个类使用起来非常简单,正如在文档字符串中可以看到的那样。
更新:“更好的实现”已移至github:excid3/urlgrabber在 byterange.py 文件中。
If you are downloading the remote file through HTTP, you need to set the
Range
header.Check in this example how it can be done. Looks like this:
EDIT: I just found a better implementation. This class is very simple to use, as it can be seen in the docstring.
Update: The "better implementation" has moved to github: excid3/urlgrabber in the byterange.py file.
我强烈建议使用 requests 库。它无疑是我用过的最好的 HTTP 库。特别是,为了完成您所描述的内容,您将执行以下操作:
I highly recommend using the requests library. It is easily the best HTTP library I have ever used. In particular, to accomplish what you have described, you would do something like:
AFAIK,这是不可能使用 fseek() 或类似的。您需要使用 HTTP Range 标头来实现此目的。服务器可能支持也可能不支持此标头,因此您的情况可能会有所不同。
编辑:这当然是假设远程文件是指存储在 HTTP 服务器上的文件...
如果您想要的文件位于 FTP 服务器上,则 FTP 只允许指定开始偏移量而不是一个范围。如果这是你想要的,那么下面的代码应该可以做到(未经测试!)
AFAIK, this is not possible using fseek() or similar. You need to use the HTTP Range header to achieve this. This header may or may not be supported by the server, so your mileage may vary.
EDIT: This is of course assuming that by remote file you mean a file stored on a HTTP server...
If the file you want is on an FTP server, FTP only allows to to specify a start offset and not a range. If this is what you want, then the following code should do it (not tested!)
您可以使用 httpio 访问远程 HTTP 文件,就像它们是本地文件一样:
You can use httpio to access remote HTTP files as if they were local: