Python: Post-Anfrage mit Bild-Dateien
Ich habe einen server und ich versuche zu bauen, ein post-request zum abrufen der Daten zurück. Ich denke, ein Weg, um dies zu erreichen, fügen Sie die Parameter im header und den Antrag. Aber ich bin immer nur wenige Fehler, die ich nicht verstehen, gut genug, um vorwärts zu gehen.
Html-Formular
<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>
Python-code: habe ich bearbeitet die Frage, die auf der Antwort basiert
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()
Fehler:
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
Nun, für eine Sache, das Bild muss ein Bild sein, kein string. Ich würde vorschlagen, versuchen Anfragen, anstatt das urllib, urllib2. docs.python-requests.org/en/latest/index.html
InformationsquelleAutor add-semi-colons | 2012-07-18
Du musst angemeldet sein, um einen Kommentar abzugeben.
Fügen Sie eine dieser header:
Auch die image-parameter, den Sie senden, ist eine Zeichenkette, nicht den Inhalt der image-Datei. Sie müssen b64 codieren
dann verwenden
encoded_image
statt '~/image.jpg
' inraw_params
Ich habe die änderungen gemacht aber ich bin noch immer der gleiche Fehler.
stellen Sie sicher, dass die url, die Sie verwenden in Ihrem python-code ist genau das gleiche wie action-Attribut in das html-Formular. Sieht aus wie du bist hinzufügen '.html in python.
gerade bearbeitet Sie die Frage mit Ihrer Antwort.
ok, aber beachten Sie, wie die url ist immer noch nicht das gleiche, in python Sie haben: Seite = 'einige.Website.com:61235', und in html Sie haben: ...<form method="POST" action="einige.server.com:61235/imgdigest"... Python fehlt der /imgdigest Teil
InformationsquelleAutor Ricardo Villamil