Python文件发送方式正确吗? (urllib2,PyCurl)。

时间:2013-12-02 08:08:59

标签: python urllib2 pycurl

您好! 我的问题是python发送到控制器,它与准备好的html发送脚本一起工作。这里的问题是上传不成功(甚至没有开始上传),尽管脚本运行完毕。该文件是二进制容器文件。问题应该在代码中,因为上传的其他方式可以完成

输出:

09:54:40:11     ...STEP: Upload Firmware
09:54:49:63     ...Upload was successful!
09:54:49:64     ...POST resource
09:54:50:60     ...Response: {"uploadFirmwareAck":0}

所以上传“已完成”它在9秒内说,但它应该需要大约5分钟。使用调试器我监视它没有启动只是跳过它并给出“上传成功”消息。我不知道为什么。有什么想法吗?

代码:

import pycurl  
from cStringIO import StringIO
import urllib2
import simplejson as json

url = 'http://eData/pvi?rName=FirmwareUpload'
req = urllib2.Request(url)
req.add_header('Content-Type','application/json')

c = pycurl.Curl()
c.setopt(c.POST, 1)
c.setopt(c.URL, url)
c.setopt(c.CONNECTTIMEOUT,0)
c.setopt(c.TIMEOUT, 0)
c.setopt(pycurl.FOLLOWLOCATION, 1)
c.setopt(pycurl.MAXREDIRS, 5)
c.setopt(pycurl.NOSIGNAL, 1)

c.setopt(c.HTTPPOST, [("file1", (c.FORM_FILE, "c:\\Users\\dem2bp\\Desktop\\HMI_Firmware update materials\\output_38.efc"))])

c.perform()
print "Upload was successful!"
print "Tx JSON:"
print "POST resource"
res = urllib2.urlopen(req)
print "Response:"
str_0 = res.read()

print str_0
c.close()

2 个答案:

答案 0 :(得分:0)

来自文档:

  

PycURL面向高级开发人员 - 如果您需要数十个   并发,快速和可靠的连接或任何复杂的连接   上面列出的功能然后PycURL适合你。

我会试试http://www.python-requests.org/en/latest/。对我来说,它总是做一些http的东西时的第一选择。通常它只是在几行代码中执行它应该做的事情。

答案 1 :(得分:0)

谢谢,但是我看到这个请求库不能运行旧版本的Python 2.6。我认为升级太冒险了。你有其他想法吗? 当我在库的某个点导入请求库时,需要更高版本的时候会抛出我的synthax错误。