2015-10-13 54 views
2

我原諒我在這裏...我是HTTP noob ...但我需要創建一個python腳本,它需要一個文件並將其上傳到服務器包含額外數據的塊。Python:將文件上傳到包含附加字段的服務器

編輯:這只是一個我要上傳的文件...但在塊

於是我開始研究和跨pycurl來到這似乎是相當複雜的。所以我去了requests這看起來非常好,直觀。

,基本上我得到了它的部分工作......但不是所有的組合:)

我已經看到了,我可以用發電機提供我的數據塊。棒極了!但是我還需要發送(對不起......我的詞彙量說到那種東西非常有限)多部分邊界?包含JSON信息等領域...

所以我的請求看起來應該是這樣的:

POST/HTTP/1.1 
Host: some server 
Content-Type: multipart/form-data; 

Connection: Keep Alive 
Transfer-Encoding: chunked 

--boundary 
Content-Disposition: form-data; name="Name of my field" 
Content-Type: application/JSON; charset=utf-8 
Content-Transfer-Encoding: 8bit 

{"Some" : "content", "in" : "here"} 

--boundary 
Content-Disposition: form-data; name="My File" 
Content-Type: audio/mpeg 
Content-Transfer-Encoding: binary 

... chunk 1 .... 

--boundary 
Content-Disposition: form-data; name="My File" 
Content-Type: audio/mpeg 
Content-Transfer-Encoding: binary 

... chunk 2 .... 

and so on... 

我想,我可以創建使用生成的分塊上傳。而且我還發現可以使用file=選項創建非文件邊界。

但問題是,我不能同時使用:(而且還用我的時候都能運行,我不能確定我的鐵塊的Content-Type,也不是一個名字......

再次...對不起我不好的詞彙:)

任何幫助是非常讚賞

回答

1
import requests 
import json 

#from here http://stackoverflow.com/a/23816211/642096 
def pretty_print_POST(req): 
    """ 
    At this point it is completely built and ready 
    to be fired; it is "prepared". 

    However pay attention at the formatting used in 
    this function because it is programmed to be pretty 
    printed and may differ from the actual request. 
    """ 
    print('{}\n{}\n{}\n\n{}'.format(
     '-----------START-----------', 
     req.method + ' ' + req.url, 
     '\n'.join('{}: {}'.format(k, v) for k, v in req.headers.items()), 
     req.body, 
    )) 

url = 'http://httpbin.org/post' 
data = {'input_name': json.dumps({ 
    'json': 'here' 
})} 
files = { 
    'file1': ('doc.txt', open('/tmp/doc.txt', 'rb'), 'text/plain'), 
    'file2': ('doc2.html', open('/tmp/doc2.html', 'rb'), 'text/html'),  
} 
r = requests.post(url, data=data, files=files) 
pretty_print_POST(r.request) 
print r.text 
+1

我實在不明白,將如何幫助我?導致您的示例'doc.txt'和'doc2.html'中的內容不會以塊的形式上傳......我想定義這些文件的每個字節應該有多少字節...... – Georg

相關問題