impreso de varias copias de correos para motor de aplicación de Google no funciona
-
12-09-2019 - |
Pregunta
Estoy tratando de enviar un formulario de varias partes utilizando httplib, url está alojado en Google App Engine, en el post que dice Método no permitido, aunque poste utilizando urllib2 obras. Se adjunta ejemplo de trabajo completa.
Mi pregunta es ¿cuál es la diferencia entre dos, por eso se trabaja pero no el otro
-
¿hay algún problema en mi mulipart código del formulario de correos?
-
o el problema es con el motor de aplicación de Google?
-
o algo más?
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
Editar: Después de cambiar putrequest a petición (en la sugerencia de Nick Johnson), funciona
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()
Así que ahora la pregunta es ¿cuál es la diferencia entre dos enfoques y puede hacerse en primer lugar primero a trabajar?
Solución
respuesta de Nick Johnson
¿Usted ha intentado enviar la solicitud con httplib usando .request () en lugar de .putrequest (), etc, el suministro de las cabeceras como dict?
Así funciona!