我在脚本中使用urllib2.py将一个文件托管到一个web服务器上,它一直在计时。我的代码:
def postdata(nodemac,filename,timestamp):
try:
wakeup()
socket.setdefaulttimeout(TIMEOUT)
opener = urllib2.build_opener(MultipartPostHandler.MultipartPostHandler)
host = HOST
func = "post_data"
url = "http://{0}{1}?f={2}&nodemac={3}&time={4}".format(host, URI, func, nodemac, timestamp)
if os.path.isfile(filename):
data = {"data":open(filename,"rb")}
response = opener.open(url, data, timeout=TIMEOUT)
retval = response.read()
if "SUCCESS" in retval:
return 0
else:
print "RETVAL "+retval
return 99
else:
print filename +" is not a file"
return 99
except Exception as e:
print e
return 99
我把超时设置为20、60和120,但同样的事情一直在发生。我想知道这是怎么回事?有东西不干净!超时设置为20以前工作得很好,然后突然,今天我开始超时。。。有人有线索吗?我在网上找不到任何能让我走得更远的东西,所以我想我可以在这里试试。。。!在
谢谢
回溯:
^{pr2}$
好吧,第一个线索是行为改变了,即使你的代码没有改变。所以,这一定是与环境有关的。在
最有可能的情况是,超时是服务器过载、损坏等的一个非常准确的信号。但是,由于您根本没有向我们提供有关您要与之通信的服务器的任何信息,所以很难做比猜测更多的事情。在
以下是一些追踪问题的方法。在
首先,获取完全相同的URL,将其粘贴到浏览器的地址栏中,然后看看会发生什么。超时了吗?或者需要20秒以上的时间来回应?在
尝试将
&data=data
添加到URL的末尾。在尝试使用一个简单的工具将请求作为POST发送。例如,从命令行中,尝试
curl -d data http://whatever
。在尝试准确记录头和post数据
urllib2
使用的内容,并使curl
发送完全相同的内容。(如果此操作失败,并且前一个问题有效,则您可能需要编辑您的问题,或提出一个新问题,并附带“为什么这项工作和那个失败?”包括细节。)尝试从具有不同internet连接的不同计算机上运行相同的测试。在
相关问题 更多 >
编程相关推荐