Python: Requête Post avec les fichiers d'image
J'ai un serveur et je suis en train de construire une requête post à récupérer les données. Je pense qu'une façon d'y parvenir est d'ajouter les paramètres dans l'en-tête et d'en faire la demande. Mais je suis arriver quelques erreurs que je ne comprends pas assez bien pour aller de l'avant.
Formulaire Html
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=ISO-8859-1">
</head>
<body>
<form method="POST" action="http://some.server.com:61235/imgdigest" enctype="multipart/form-data">
quality:<input type="text" name="quality" value="2"><br>
category:<input type="text" name="category" value="1"><br>
debug:<input type="text" name="debug" value="1"><br>
image:<input type="file" name="image"><br>
<input type="submit" value="Submit">
</form>
</body>
</html>
Code Python: j'ai édité la question en se basant sur la réponse
import urllib, urllib2
import base64
if __name__ == '__main__':
page = 'http://some.site.com:61235/'
with open("~/image.jpg", "rb") as image_file:
encoded_image = base64.b64encode(image_file.read())
raw_params = {'quality':'2','category':'1','debug':'0', 'image': encoded_image}
params = urllib.urlencode(raw_params)
request = urllib2.Request(page, params)
request.add_header("Content-type", "application/x-www-form-urlencoded; charset=UTF-8")
page = urllib2.urlopen(request)
info = page.info()
Erreurs:
page = urllib2.urlopen(request)
File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", line 126, in urlopen
return _opener.open(url, data, timeout)
File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", line 406, in open
response = meth(req, response)
File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", line 519, in http_response
'http', request, response, code, msg, hdrs)
File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", line 444, in error
return self._call_chain(*args)
File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", line 378, in _call_chain
result = func(*args)
File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", line 527, in http_error_default
raise HTTPError(req.get_full_url(), code, msg, hdrs, fp)
urllib2.HTTPError: HTTP Error 404: Not Found
Eh bien, pour une chose, l'image doit être une image, pas une chaîne de caractères. Je vous suggérons d'essayer les demandes, au lieu d'utiliser urllib, urllib2. docs.python-requests.org/en/latest/index.html
OriginalL'auteur add-semi-colons | 2012-07-18
Vous devez vous connecter pour publier un commentaire.
Ajouter un en-tête:
Aussi, l'image de paramètre que vous envoyez est une chaîne de caractères, pas le contenu du fichier image. Vous devez b64 encoder
ensuite utiliser
encoded_image
au lieu de "~/image.jpg
" dansraw_params
J'ai fait des changements, mais je reçois toujours le même message d'erreur.
assurez-vous que l'url que vous utilisez dans votre code python est exactement le même que l'attribut action du formulaire html. On dirait que vous êtes en train d'ajouter '.html' en python.
juste édité la question avec votre réponse.
ok, mais l'avis de la façon dont l'url est toujours pas la même, en python, vous avez: page = '.site.com:61235', et en html, vous devez: ...<form method="POST" action=".serveur.com:61235/imgdigest"... le Python est manquant /imgdigest partie
OriginalL'auteur Ricardo Villamil