python中的urllib2 post超时

2024-09-26 17:49:42 发布

您现在位置:Python中文网/ 问答频道 /正文

我在脚本中使用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}$

Tags: hosturldatareturniftimeoutopenerurllib2
1条回答
网友
1楼 · 发布于 2024-09-26 17:49:42

The timeout set to 20 used to work just fine and then all of a sudden, today it started to time out on me... does anyone have any clues?

好吧,第一个线索是行为改变了,即使你的代码没有改变。所以,这一定是与环境有关的。在

最有可能的情况是,超时是服务器过载、损坏等的一个非常准确的信号。但是,由于您根本没有向我们提供有关您要与之通信的服务器的任何信息,所以很难做比猜测更多的事情。在

以下是一些追踪问题的方法。在

首先,获取完全相同的URL,将其粘贴到浏览器的地址栏中,然后看看会发生什么。超时了吗?或者需要20秒以上的时间来回应?在

尝试将&data=data添加到URL的末尾。在

尝试使用一个简单的工具将请求作为POST发送。例如,从命令行中,尝试curl -d data http://whatever。在

尝试准确记录头和post数据urllib2使用的内容,并使curl发送完全相同的内容。(如果此操作失败,并且前一个问题有效,则您可能需要编辑您的问题,或提出一个新问题,并附带“为什么这项工作和那个失败?”包括细节。)

尝试从具有不同internet连接的不同计算机上运行相同的测试。在

相关问题 更多 >

    热门问题