【问题标题】:Python file sending correct way? (urllib2, PyCurl).Python文件发送正确的方式? (urllib2,PyCurl)。
【发布时间】:2013-12-02 08:08:59
【问题描述】:

你好! 我的问题是 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()

【问题讨论】:

    标签: python urllib2 pycurl


    【解决方案1】:

    来自文档:

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

    我会试试http://www.python-requests.org/en/latest/。对我来说,做一些 http 的东西时,它总是首选。通常它只需要几行代码就可以完成它应该做的事情。

    【讨论】:

    • 好的,我喜欢上传一个相对较大的二进制文件。我听说 urllib2 对此没有太多支持。由于 2.5 python,python 请求失败了,所以有人可以知道可能是什么问题。
    【解决方案2】:

    谢谢,但正如我所见,这个请求库不能在像 2.6 这样的旧版 Python 上运行。我认为升级风险太大。你有别的想法吗? 当我在需要更高版本的库的某个点导入请求库时,会抛出语法错误。

    【讨论】:

      猜你喜欢
      • 2011-06-21
      • 1970-01-01
      • 1970-01-01
      • 2011-01-24
      • 1970-01-01
      • 1970-01-01
      • 2011-09-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多