Python 如何检查代理后是否存在远程文件
我正在编写连接到web服务器的应用程序(我是服务器的所有者)发送用户提供的信息,处理该信息并将结果发送回应用程序。处理结果所需的时间取决于用户请求(从几秒钟到几分钟) 我使用无限循环检查文件是否存在(可能有更智能的方法…可能我可以估计请求可能需要的最长时间,并避免使用无限循环) 代码的重要部分如下所示Python 如何检查代理后是否存在远程文件,python,proxy,mechanize,file-exists,Python,Proxy,Mechanize,File Exists,我正在编写连接到web服务器的应用程序(我是服务器的所有者)发送用户提供的信息,处理该信息并将结果发送回应用程序。处理结果所需的时间取决于用户请求(从几秒钟到几分钟) 我使用无限循环检查文件是否存在(可能有更智能的方法…可能我可以估计请求可能需要的最长时间,并避免使用无限循环) 代码的重要部分如下所示 import time import mechanize br = mechanize.Browser() br.set_handle_refresh(False) proxy_values={
import time
import mechanize
br = mechanize.Browser()
br.set_handle_refresh(False)
proxy_values={'http':'proxy:1234'}
br.set_proxies(proxy_values)
While True:
try:
result=br.open('http://www.example.com/sample.txt').read()
break
except:
pass
time.sleep(10)
在代理之后,循环永远不会结束,但如果我更改类似的代码
time.sleep(200)
result=br.open('http://www.example.com/sample.txt').read()
i、 e.在尝试读取之前,我等待足够的时间来确保文件已创建,我确实获得了文件:-)
似乎如果mechanize每次都请求一个不存在的文件,mechanize会再次请求,我不会得到任何文件
我使用Firefox复制了相同的行为。我请求一个不存在的文件,然后创建该文件(请记住我是服务器的所有者…),我无法获取该文件。
使用mechanize和Firefox我可以删除文件
我认为问题与代理缓存有关,我认为我无法删除该缓存,但可能有某种方法告诉代理我需要重新检查文件是否存在
还有其他解决这个问题的建议吗 最简单的解决方案是添加一个(未使用的)GET参数,以避免缓存请求 即: web应用程序应忽略额外的参数
HTTP头可能是正确的方法,请参阅。谢谢,您的解决方案非常有效:-)我也会阅读您的链接。唯一的问题是我不明白你的解决方案为什么有效。我不明白为什么要分配“request=0”(我删除了这一行,代码仍然有效),我也不知道“.r=%d”参数的作用(似乎是让代理相信程序请求了不同的文件,但实际上没有向服务器请求不同的文件)@aloctavodia:我指的是相同的变量,但写的名称不同。现在修好了。
i = 0
While True:
try:
result=br.open('http://www.example.com/sample.txt?r=%d' % i).read()
break
except:
i += 1
time.sleep(10)