urllib2 post timeout in 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

我设置TIMEOUT为20,60和120,但同样的事情继续发生。我在想这是怎么回事?有东西犯规了!把超时时间设置为20秒本来还可以,但是突然间,今天它开始超时了……有人知道什么线索吗?我在网上找不到任何能让我更进一步的东西,所以我想我应该在这里试试…!

谢谢,

回溯:

 File "gateway.py", line 686, in CloudRun
    read_img()
  File "gateway.py", line 668, in read_img
    retval = database.postimg(mac,fh,timestmp)
  File "/root/database.py", line 100, in postimg
    response = opener.open(url, data, timeout=TIMEOUT)
  File "/usr/lib/python2.7/urllib2.py", line 394, in open
  File "/usr/lib/python2.7/urllib2.py", line 412, in _open
  File "/usr/lib/python2.7/urllib2.py", line 372, in _call_chain
  File "/usr/lib/python2.7/urllib2.py", line 1199, in http_open
  File "/usr/lib/python2.7/urllib2.py", line 1174, in do_open
URLError: <urlopen error timed out>

超时设置为20以前工作得很好,然后突然,今天它开始超时在我身上…有人知道什么线索吗?

嗯,第一个线索是,即使你的代码没有改变,行为也会改变。所以,它必须与环境有关。

最可能的情况是,超时是服务器过载、故障等的精确信号。但是,由于您没有给我们任何关于您试图与之交谈的服务器的信息,因此除了猜测之外很难做更多的事情。

这里有一些追踪问题的想法。

首先,将相同的URL粘贴到浏览器的地址栏,看看会发生什么。超时了吗?或者回应时间超过20秒?

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

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

尝试准确记录urllib2使用的头和post数据,并使curl发送完全相同的东西。(如果这个失败了,而前一个成功了,你可能想要编辑你的问题,或者问一个新的问题,用"为什么这个成功了,那个失败了?"和细节。)

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

相关内容

  • 没有找到相关文章

最新更新