我的问题是一般问题。我想向 uC 执行数据发送(大二进制容器文件),它与用 C# 编写的准备好的 html 发送脚本一起工作。
C#代码:
WebClient client = new WebClient();
client.UploadFileAsync(uri, "POST", "C:\\Users\\user1\\file\\to\\the\\firmware\\fw-container.efc");
这里的问题是尽管脚本运行,但上传没有成功(甚至没有开始在 Python 中上传)。问题应该出在代码中,因为其他方式上传也可以完成Python代码:
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\\user1\\file\\to\\the\\firmware\\fw-container.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()
错误消息在c.perform()行如下所示:
PYCURL ERROR 6 - "Couldn't resolve host 'eData'"
即使我使用不同的 python 库,我也不知道如何使上传工作。我找到了以下库使用选项: urllib2 使用多种处理数据方式发送(从未尝试过,不知道该怎么做) 请求库(不适用于 2.5 python) 海报库(似乎无法为 python 2.5 安装鸡蛋)和 PyCurl(我去了这个方向)
无论这有多小或与其他图书馆解决方案相关,请提出建议。谢谢!