Tôi quan tâm đến việc viết một tập lệnh python ngắn tải lên một tệp nhị phân ngắn (.wav/.raw audio) thông qua một yêu cầu POST tới một máy chủ từ xa.Các tệp nhị phân HTTP POST bằng Python: ví dụ ngắn gọn không phải là pycurl?
Tôi đã làm điều này với pycurl, điều này làm cho nó rất đơn giản và dẫn đến một tập lệnh súc tích; Thật không may nó cũng yêu cầu người dùng cuối có cài đặt pycurl, mà tôi không thể dựa vào.
Tôi cũng đã xem một số ví dụ trong các bài đăng khác chỉ dựa trên các thư viện cơ bản, urllib, urllib2, v.v., tuy nhiên, điều này dường như khá tiết kiệm, cũng là điều tôi muốn tránh.
Tôi tự hỏi nếu có bất kỳ ví dụ ngắn gọn nào không yêu cầu sử dụng thư viện bên ngoài và điều này sẽ nhanh chóng và dễ dàng cho bên thứ ba hiểu - ngay cả khi chúng không quen thuộc với python.
Những gì tôi đang sử dụng hiện nay có vẻ như,
def upload_wav(wavfile, url=None, **kwargs):
"""Upload a wav file to the server, return the response."""
class responseCallback:
"""Store the server response."""
def __init__(self):
self.contents=''
def body_callback(self, buf):
self.contents = self.contents + buf
def decode(self):
self.contents = urllib.unquote(self.contents)
try:
self.contents = simplejson.loads(self.contents)
except:
return self.contents
t = responseCallback()
c = pycurl.Curl()
c.setopt(c.POST,1)
c.setopt(c.WRITEFUNCTION, t.body_callback)
c.setopt(c.URL,url)
postdict = [
('userfile',(c.FORM_FILE,wavfile)), #wav file to post
]
#If there are extra keyword args add them to the postdict
for key in kwargs:
postdict.append((key,kwargs[key]))
c.setopt(c.HTTPPOST,postdict)
c.setopt(c.VERBOSE,verbose)
c.perform()
c.close()
t.decode()
return t.contents
đây không phải là chính xác, nhưng nó mang lại cho bạn những ý tưởng chung. Nó hoạt động tuyệt vời, đơn giản để các bên thứ ba hiểu, nhưng yêu cầu pycurl.
Liên quan: [Gửi tệp bằng POST từ tập lệnh Python] (http://stackoverflow.com/q/68477/95735) –