Hola.
Tengo que realizar una solicitud en Python a una dirección Url mediante el método POST.
(La documentación de la API está aquí: https://faucethub.io/api/ (https://faucethub.io/api/) )
Estoy probando este código:
#!/usr/bin/python
# -*- coding: utf-8 -*-
print "Content-type: text/html\n\n"
import requests
r = requests.post("https://faucethub.io/api/v1/balance", data={'api_key': 'xxxxxxxxxxxxxxxxxxxxxxx'})
print(r.status, r.message)
Pero no funciona. ¿Alguien podría decirme qué estoy haciendo mal?
Un saludo y gracias de antemano.
print(r.status_code, r.text)
leete la documentación de request
Hola, gracias.
Sí, la api_key es correcta, aquí la pongo oculta, pero es correcta.
#!/usr/bin/python
# -*- coding: utf-8 -*-
print "Content-type: text/html\n\n"
import requests
r = requests.post("https://faucethub.io/api/v1/balance", data={'api_key': 'xxxxxxxxxxxxxxxxxxxxxxx'})
print(r.status_code, r.text)
Cambiando el código con tu sugerencia el resultado es el mismo.
Un saludo.
que resultado te da?
una página en blanco
como que una pagina en blanco?
esto es consola...
prueba el codigo con lo que te dejé y perfectamente me responde api key invalido
Aquí se puede probar la dirección con el script en mi servidor:
##########
El código es:
#!/usr/bin/python
# -*- coding: utf-8 -*-
print "Content-type: text/html\n\n"
import requests
r = requests.post("https://faucethub.io/api/v1/balance", data={'api_key': 'xxxxxxxxxxxxxxxxxxxxxxx'})
print(r.status_code, r.text)
lo probaste en consola?
No, voy a hacerlo y te digo,
Hola.
Perdona pero he intentado ejecutar el script en una consola online, pero no encuentro ninguna.
Es que en mi equipo no tengo ninguna instalada. ¿A ti sí te funciona en tu consola?
Content-type: text/html
(200, u'{"status":403,"message":"Invalid API key."}')
cambia tu print "hola mundo", si funciona es algo del codigo, si no, es el server
Hola.
Sí, si otros scripts sí me funcionan correctamente, es éste el que no me funciona.
Creo que mañana hablaré con los administradores de mi hosting.
Gracias y un saludo.
Hola.
Ya sé cuál es el problema. Mi proveedor de hosting sólo tiene instalados los módulos estándares de Python, y el módulo requests no es estándar.
¿Hay alguna forma de hacer lo mismo con módulos estándares?
Un saludo.
urlib2 es un modulo standard según creo... (tendrías que mostrar la lista)
este ejemplo es sacado de stackoverflow
https://stackoverflow.com/questions/6348499/making-a-post-call-instead-of-get-using-urllib2 (https://stackoverflow.com/questions/6348499/making-a-post-call-instead-of-get-using-urllib2)
url = 'http://myserver/post_service'
data = urllib.urlencode({'name' : 'joe', 'age' : '10'})
req = urllib2.Request(url, data)
response = urllib2.urlopen(req)
print response.read()
Gracias engel lex.
Creo que ya andamos cerca, pero no termino de conseguirlo.
Me pasa una cosa curiosa, y es lo siguiente:
El siguiente script, parece que sí funciona:
#!/usr/bin/python
# -*- coding: utf-8 -*-
print "Content-type: text/html\n\n"
import urllib2
req = urllib2.Request("https://faucethub.io/api/v1/balance", data={'api_key': 'xxxxxxxxxxxxxxxxxxxx'})
print """Hola mundo."""
Pero, este otro, en el cual sólo se ha añadido una línea más (la 8), ya no funciona:
#!/usr/bin/python
# -*- coding: utf-8 -*-
print "Content-type: text/html\n\n"
import urllib2
req = urllib2.Request("https://faucethub.io/api/v1/balance", data={'api_key': 'xxxxxxxxxxxxxxxxxxxx'})
response = urllib2.urlopen(req)
print """Hola mundo."""
¿A qué puede deberse?
Un saludo.
puede que tu proveedor está bloqueando las llamadas desde python, que copnfiguración tiene el servidor para python?
en esto es mejor un vps que un hosting porque te da control total de tu sistema