2

ファイルをリモート デバイスにアップロードしたいと考えています。Wiresharkで接続を調べると、これが得られます

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,application/xml;q=0.9, / ;q=0.8のみを受け入れることを示しています

スクリプトを使用してファイルをアップロードすると、

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

だから、それは間違ったファイルタイプです..

File の content-type を変更するにはどうすればよいですか?

私のコードは次のようになります。

#!/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()
4

1 に答える 1

2

ドキュメントにposter.encode.MultipartParamは次のように書かれています。

が設定されている場合filetype、このパラメーターの Content-Type として使用されます。設定されていない場合、デフォルトは「text/plain; charset=utf8」</p>

したがって、次のようにパラメータを指定する代わりに:

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

次のように指定します。

params = [MultipartParam('restore', open("Config.cfg", "rb"),
                         filetype = 'application/octet-stream'),
          ('upload', 'PC ==>; Unit')]
于 2012-10-01T19:11:41.237 に答える