मैं रेडमाइन के साथ इंटरफेस के लिए कुछ कोड लिख रहा हूं और मुझे प्रक्रिया के हिस्से के रूप में कुछ फाइलें अपलोड करने की आवश्यकता है, लेकिन मुझे यकीन नहीं है कि एक बाइनरी फ़ाइल युक्त पायथन से POST अनुरोध कैसे करें।पायथन पोस्ट बाइनरी डेटा
मैं आदेशों here की नकल करने की कोशिश कर रहा हूँ:
curl --data-binary "@image.png" -H "Content-Type: application/octet-stream" -X POST -u login:password http://redmine/uploads.xml
अजगर (नीचे) में, लेकिन यह काम करने के लिए प्रतीत नहीं होता। मुझे यकीन नहीं है कि समस्या किसी फ़ाइल से एन्कोडिंग से संबंधित है या हेडर के साथ कुछ गलत है या नहीं।
import urllib2, os
FilePath = "C:\somefolder\somefile.7z"
FileData = open(FilePath, "rb")
length = os.path.getsize(FilePath)
password_manager = urllib2.HTTPPasswordMgrWithDefaultRealm()
password_manager.add_password(None, 'http://redmine/', 'admin', 'admin')
auth_handler = urllib2.HTTPBasicAuthHandler(password_manager)
opener = urllib2.build_opener(auth_handler)
urllib2.install_opener(opener)
request = urllib2.Request(r'http://redmine/uploads.xml', FileData)
request.add_header('Content-Length', '%d' % length)
request.add_header('Content-Type', 'application/octet-stream')
try:
response = urllib2.urlopen(request)
print response.read()
except urllib2.HTTPError as e:
error_message = e.read()
print error_message
मैं सर्वर के लिए उपयोग किया है और यह एक एन्कोडिंग त्रुटि की तरह दिखता है:
...
invalid byte sequence in UTF-8
Line: 1
Position: 624
Last 80 unconsumed characters:
7z¼¯'ÅÐз2^Ôøë4g¸R<süðí6kĤª¶!»=}jcdjSPúá-º#»ÄAtD»H7Ê!æ½]j):
(further down)
Started POST "/uploads.xml" for 192.168.0.117 at 2013-01-16 09:57:49 -0800
Processing by AttachmentsController#upload as XML
WARNING: Can't verify CSRF token authenticity
Current user: anonymous
Filter chain halted as :authorize_global rendered or redirected
Completed 401 Unauthorized in 13ms (ActiveRecord: 3.1ms)
कोई विचार क्यों नहीं, लेकिन अनुरोध मॉड्यूल का उपयोग कर सटीक एक ही कोड ठीक काम करता है ... बहुत बहुत धन्यवाद। हालांकि, अब मैं जानना बहुत उत्सुक हूं कि urllib क्यों काम नहीं करता है ... – Mac