簡體   English   中英

Python文件發送正確的方式? (urllib2,PyCurl)。

[英]Python file sending correct way? (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()

從文檔中:

PycURL面向高級開發人員-如果您需要數十個並發,快速和可靠的連接或上面列出的任何復雜功能,則PycURL非常適合您。

我會嘗試一下http://www.python-requests.org/en/latest/ 對我來說,它總是做一些HTTP內容時的首選。 通常,它只需執行幾行代碼即可完成的工作。

謝謝,但是正如我所看到的,此請求庫不能與2.6之類的舊版本Python一起運行。 我認為升級風險太大。 你還有其他主意嗎? 當我在要求更高版本的庫的某個位置導入請求庫時,拋出Synthax錯誤。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM