5 python http urllib download urllib2
我希望从http url下载文件到本地文件.该文件是足够大的,我想下载并保存豆腐块,而不是read()与write()整个文件作为一个巨大的字符串.
接口urllib.urlretrieve基本上就是我想要的.但是,我无法看到在下载时设置请求标头的方法 urllib.urlretrieve,这是我需要做的事情.
如果我使用urllib2,我可以通过其Request对象设置请求标头.但是,我没有看到将urllib2文件直接下载到磁盘上的路径中的API urlretrieve.似乎相反,我将不得不使用循环来迭代块中返回的数据,自己将它们写入文件并检查我们何时完成.
构建一个功能urllib.urlretrieve但允许传递请求头的函数的最佳方法是什么?
如果您想使用 urllib 和 urlretrieve,请子类化urllib.URLopener并使用其addheader()方法来调整标头(即:addheader('Accept', 'sound/basic'),我从 urllib.addheader 的文档字符串中提取)。
要安装 URLopener 以供 urllib 使用,请参阅文档的urllib._urlopener部分中的示例(请注意下划线):
import urllib
class MyURLopener(urllib.URLopener):
pass # your override here, perhaps to __init__
urllib._urlopener = MyURLopener
Run Code Online (Sandbox Code Playgroud)
但是,您会很高兴听到您对问题评论的评论,从中读取空字符串read()确实是停止的信号。例如,这就是 urlretrieve 处理何时停止的方式。TCP/IP 和套接字抽象了读取过程,阻塞等待附加数据,除非另一端的连接是 EOF 并关闭,在这种情况下,从连接进行 read() 操作会返回一个空字符串。空字符串意味着没有数据流入...您不必担心有序的数据包重新组装,因为这一切都已为您处理。如果这是您对 urllib2 的担忧,我认为您可以安全地使用它。
| 归档时间: |
|
| 查看次数: |
6544 次 |
| 最近记录: |