Ich versuche, ein mehrteiliges Formular mit httplib, URL ist auf Google App-Engine gehostet, auf Post sagt Methode nicht erlaubt, obwohl der Beitrag mit urllib2 funktioniert. Das vollständige Arbeitsbeispiel ist beigefügt.Multipart Formular Beitrag zu Google App-Engine funktioniert nicht
Meine Frage ist, was ist der Unterschied zwischen beiden ist, warum man arbeitet aber nicht die andere
gibt es ein Problem in meinem mulipart Form Postleitzahl?
oder das Problem ist mit Google App Engine?
oder etwas anderes?
import httplib
import urllib2, urllib
# multipart form post using httplib fails, saying
# 405, 'Method Not Allowed'
url = "http://mockpublish.appspot.com/publish/api/revision_screen_create"
_, host, selector, _, _ = urllib2.urlparse.urlsplit(url)
print host, selector
h = httplib.HTTP(host)
h.putrequest('POST', selector)
BOUNDARY = '----------THE_FORM_BOUNDARY'
content_type = 'multipart/form-data; boundary=%s' % BOUNDARY
h.putheader('content-type', content_type)
h.putheader('User-Agent', 'Python-urllib/2.5,gzip(gfe)')
content = ""
L = []
L.append('--' + BOUNDARY)
L.append('Content-Disposition: form-data; name="test"')
L.append('')
L.append("xxx")
L.append('--' + BOUNDARY + '--')
L.append('')
content = '\r\n'.join(L)
h.putheader('content-length', str(len(content)))
h.endheaders()
h.send(content)
print h.getreply()
# post using urllib2 works
data = urllib.urlencode({'test':'xxx'})
request = urllib2.Request(url)
f = urllib2.urlopen(request, data)
output = f.read()
print output
Edit: Nach putrequest Wechsel zu beantragen (Vorschlag auf Nick Johnson), funktioniert es
url = "http://mockpublish.appspot.com/publish/api/revision_screen_create"
_, host, selector, _, _ = urllib2.urlparse.urlsplit(url)
h = httplib.HTTPConnection(host)
BOUNDARY = '----------THE_FORM_BOUNDARY'
content_type = 'multipart/form-data; boundary=%s' % BOUNDARY
content = ""
L = []
L.append('--' + BOUNDARY)
L.append('Content-Disposition: form-data; name="test"')
L.append('')
L.append("xxx")
L.append('--' + BOUNDARY + '--')
L.append('')
content = '\r\n'.join(L)
h.request('POST', selector, content,{'content-type':content_type})
res = h.getresponse()
print res.status, res.reason, res.read()
so nun bleibt die Frage, was der Unterschied zwischen beiden Ansätzen ist und zuerst zuerst zur Arbeit gemacht werden?
Haben Sie versucht, die Anfrage mit httplib mit .request() anstelle von .putrequest() usw. zu senden, die Header als dict? –
eigentlich wollte ich eine Datei mit mehrteiligen Formulardaten senden, kann ich das mit Anfrage tun? –
@Nick es funktioniert !, warum? –