Estoy intentando acceder a una API web utilizando una técnica POST. PUEDO acceder a él usando una técnica GET, pero los propietarios de API me dicen que cierta funcionalidad solo funciona con POST. Lamentablemente, parece que no puedo hacer funcionar el POST.Uso de POST y urllib2 para acceder a la API web
Aquí es lo que funciona con GET:
API_URL = "http://example.com/api/"
def call_api(method, **kwargs):
url = API_URL + method
if kwargs:
url += '?' + urllib.urlencode(kwargs)
req = urllib2.Request(url)
auth = 'Basic ' + base64.urlsafe_b64encode("%s:%s" % (USER, PASS))
req.add_header('Authorization', auth)
return urllib2.urlopen(req)
Aquí es lo que no funciona con la POST (causas de error HTTP 400):
API_URL = "http://example.com/api/"
def call_api(method, **kwargs):
url = API_URL + method
data=''
if kwargs:
data=urllib.urlencode(kwargs)
req = urllib2.Request(url, data)
auth = 'Basic ' + base64.urlsafe_b64encode("%s:%s" % (USER, PASS))
req.add_header('Authorization', auth)
return urllib2.urlopen(req)
¿Hay algo que saltan a cualquier persona como inherentemente incorrecto en el Código POST? Nunca he hecho una llamada POST antes, pero todo lo que he leído parece sugerir que mi código es razonable. ¿Hay alguna forma diferente en que se supone que debo hacer el comando add_header para la autorización si estoy usando POST?
Su código POST parece ser exactamente el mismo que su código GET. ¿Copiaste y pegaste algo incorrectamente? –
¡Doh! Sí, hubo un error al pegar. Corregido ahora. – neomech