2012-10-01 71 views
1

我想將文件上傳到遠程設備。 如果我看到了Wireshark的連接我得到這個如何更改內容類型Python

POST /saveRestore.htm.cgi HTTP/1.1 
Host: 10.128.115.214 
User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:15.0) Gecko/20100101 Firefox/15.0.1 
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 
Accept-Language: de-de,de;q=0.8,en-us;q=0.5,en;q=0.3 
Accept-Encoding: gzip, deflate 
Connection: keep-alive 
Referer: http://10.128.115.214/saveRestore.htm 
Cache-Control: max-age=0 
Content-Type: multipart/form-data; boundary=---------------------------961265085509552220604142744 
Content-Length: 10708 

-----------------------------961265085509552220604142744 
Content-Disposition: form-data; name="restore"; filename="config(2).cfg" 
Content-Type: application/octet-stream 

現在這說的是,瀏覽器只接受text/html的,是application/xhtml + xml的,應用/ XML; Q = 0.9,/; q = 0.8

如果我上傳的文件與我的腳本,它說

--0a7125aebb8845ba8ab9aa21306b01f6 
Content-Disposition: form-data; name="restore"; filename="Config.cfg" 
Content-Type: text/plain; charset=utf-8 

所以這是一個錯誤的文件類型..

那麼如何更改文件的內容類型?

我的代碼看起來到目前爲止如下:

#!/usr/bin/python 

import httplib 
import urllib2 
from poster.encode import multipart_encode 
import poster 
from poster.streaminghttp import register_openers 
register_openers() 

params = {'restore': open("Config.cfg", "rb"), 'upload': 'PC ==>; Unit'} 

datagen, headers = multipart_encode(params) 

request = urllib2.Request('http://10.128.115.214/saveRestore.htm.cgi', datagen, headers) 
u = urllib2.urlopen(request) 
print u.read() 
+0

可能重複(海報)](http://stackoverflow.com/questions/12669274/wrong-content-type-when-transfering-file-with-python-poster) –

+0

這是完全不清楚。什麼是服務器和什麼是客戶端,你在哪裏設置內容類型/處置? – njzk2

+0

服務器是10.128.115.214 saveRestore.htm.cgi是一個用於上傳和恢復文件的Web界面......並且我嘗試使用腳本而不是Web界面執行該操作......並且如果我執行uplaod與網絡接口...和文件的內容類型是錯誤的,當我這樣做與腳本 – VanDeath

回答

2

在它說documentation for poster.encode.MultipartParam

如果filetype設置,它被用作將Content-Type此參數。如果未設置,則默認爲「text/plain;字符集= UTF8」

因此而不是指定你這樣的參數:

params = {'restore': open("Config.cfg", "rb"), 'upload': 'PC ==>; Unit'} 

指定它們是這樣的:

params = [MultipartParam('restore', open("Config.cfg", "rb"), 
         filetype = 'application/octet-stream'), 
      ('upload', 'PC ==>; Unit')] 
與Python transfering文件時,[錯誤的內容類型的
+0

Thx非常多! = d – VanDeath