如何检查代理后面是否存在远程文件

时间:2011-09-12 18:24:58

标签: python proxy mechanize file-exists

我编写连接到Web服务器的应用程序(我是服务器的所有者)发送用户提供的信息,处理该信息并将结果发送回应用程序。处理结果所需的时间取决于用户请求(从几秒到几分钟)。

我使用无限循环来检查文件是否存在(可能有更智能的方法......可能我可以估计请求可以采取的最长时间并避免使用和无限循环)

代码的重要部分如下所示

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()

即。我等待足够的时间确保在尝试读取文件之前创建文件,我确实得到了文件: - )

似乎机械化要求一个文件不会每次都退出机械化会再次询问我会得到没有文件......

我使用Firefox复制了相同的行为。我要求一个不存在的文件然后我创建该文件(记住我是服务器的所有者...)我无法获取该文件。 使用mechanize和Firefox我可以删除文件...

我认为问题与代理缓存有关,我想我无法删除缓存,但可能有一些方法告诉代理我需要重新检查文件是否存在...

还有其他建议可以解决这个问题吗?

1 个答案:

答案 0 :(得分:2)

最简单的解决方案是添加(未使用的)GET参数以避免缓存请求。

即:

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)

Web应用程序应忽略额外参数。

HTTP HEAD可能是执行此操作的正确方法,请参阅this question for a example