2012-10-01 6 views
1

Je veux télécharger un fichier vers un périphérique distant. Si je regarde la connexion avec Wireshark je reçois ceComment modifier le type de contenu 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 

Maintenant, ce dit que le navigateur accepte uniquement le texte/html, application/xhtml + xml, application/xml; q = 0,9, /; q = 0,8

Si je télécharger le fichier avec mon script, il dit

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

il est donc un type de fichier incorrect ..

alors comment puis-je changer le type de contenu du fichier?

Mon code semble jusqu'à présent comme suit:

#!/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

double possible de [Type de contenu incorrect lorsque le fichier transférer avec Python (affiche)] (http://stackoverflow.com/questions/12669274/wrong-content-type-when-transfering-file-with-python-poster) –

+0

c'est totalement flou. Quel est le serveur et quel est le client, où définissez-vous le type de contenu/disposition? – njzk2

+0

Le serveur est 10.128.115.214 le saveRestore.htm.cgi est une interface Web pour télécharger et restaurer des fichiers ... Et j'essaye de faire cela avec un script et pas sur l'interface Web ... et le 1 wireshark vient si je fais le uplaod avec l'interface web ... et le Content-Type du fichier est faux quand je fais cela avec le script – VanDeath

Répondre

2

Dans le documentation for poster.encode.MultipartParam il est dit:

Si filetype est défini, il est utilisé comme Content-Type pour ce paramètre. Si non défini, il est par défaut "text/plain"; charset = UTF8”

Ainsi, au lieu de spécifier vos paramètres comme ceci:

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

les spécifier comme ceci:

params = [MultipartParam('restore', open("Config.cfg", "rb"), 
         filetype = 'application/octet-stream'), 
      ('upload', 'PC ==>; Unit')] 
+0

Merci beaucoup! = D – VanDeath