gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 16:20:09 25 4
gpt4 key购买 nike

我编写连接到 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()

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

似乎如果 Mechanize 每次都要求一个不退出的文件, Mechanize 会再次询问我将不会得到任何文件......

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

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

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

最佳答案

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

IE:

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 .

关于python - 如何检查代理后面是否存在远程文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7392176/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com