当前位置:  开发笔记 > 编程语言 > 正文

urllib2什么时候实际从网址下载文件?

如何解决《urllib2什么时候实际从网址下载文件?》经验,为你挑选了2个好方法。

看到代码,我希望发生以下情况:

    urlopen()打开连接,并发送查询.然后服务器开始提供回复.此时,数据在缓冲区中累积,直到它们已满并且操作系统告诉服务器保持一段时间.

    然后data.read()清空缓冲区,以便操作系统告诉服务器继续,然后下载其余的回复.

当然,如果回复足够短,或者如果响应足够.read()快,那么缓冲区没有时间填满,下载一次完成.



1> ddaa..:

看到代码,我希望发生以下情况:

    urlopen()打开连接,并发送查询.然后服务器开始提供回复.此时,数据在缓冲区中累积,直到它们已满并且操作系统告诉服务器保持一段时间.

    然后data.read()清空缓冲区,以便操作系统告诉服务器继续,然后下载其余的回复.

当然,如果回复足够短,或者如果响应足够.read()快,那么缓冲区没有时间填满,下载一次完成.



2> mhawke..:

我同意ddaa.但是,如果您想了解这类事情,可以使用nc(在*nix中)之类的东西设置虚拟服务器,然后在交互式Python解释器中打开URL.

在一个终端中,运行nc -l 1234将打开套接字并侦听本地计算机的端口1234上的连接.nc将接受传入连接并显示它从套接字读取的内容.您键入的任何内容都nc将通过套接字发送到远程连接,在本例中为Python urlopen().

在另一个终端运行Python并输入您的代码,即

data = urllib2.urlopen('http://127.0.0.1:1234')
data.read()

调用urlopen()将建立与服务器的连接,发送请求然后阻止等待响应.您将看到nc将HTTP请求打印到其终端中.

现在在正在运行的终端中输入内容nc.调用urlopen()仍然会阻止,直到你按下ENTER nc,即直到它收到一个新的行字符.因此urlopen(),在读取至少一个新行字符之前不会返回.(对于那些担心可能缓冲的人来说nc,这不是一个问题.urlopen()在它看到第一个新行字符之前会阻塞.)

因此应该注意,urlopen()将阻塞直到接收到第一个新行字符,之后可以从连接读取数据.在实践中,HTTP响应是短多线响应,因此urlopen()应该很快返回.

推荐阅读
php
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有