Foro de elhacker.net

Programación => Scripting => Mensaje iniciado por: MA40 en 12 Junio 2017, 23:01 pm



Título: [Python] Solicitud mediante método POST
Publicado por: MA40 en 12 Junio 2017, 23:01 pm
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:

Código
  1. #!/usr/bin/python
  2. # -*- coding: utf-8 -*-
  3.  
  4. print "Content-type: text/html\n\n"
  5. import requests
  6.  
  7. r = requests.post("https://faucethub.io/api/v1/balance", data={'api_key': 'xxxxxxxxxxxxxxxxxxxxxxx'})
  8. print(r.status, r.message)

Pero no funciona. ¿Alguien podría decirme qué estoy haciendo mal?

Un saludo y gracias de antemano.


Título: Re: [Python] Solicitud mediante método POST
Publicado por: engel lex en 12 Junio 2017, 23:05 pm
Código
  1. print(r.status_code, r.text)


leete la documentación de request


Título: Re: [Python] Solicitud mediante método POST
Publicado por: MA40 en 12 Junio 2017, 23:13 pm
Hola, gracias.

Sí, la api_key es correcta, aquí la pongo oculta, pero es correcta.

Código
  1. #!/usr/bin/python
  2. # -*- coding: utf-8 -*-
  3.  
  4. print "Content-type: text/html\n\n"
  5. import requests
  6.  
  7. r = requests.post("https://faucethub.io/api/v1/balance", data={'api_key': 'xxxxxxxxxxxxxxxxxxxxxxx'})
  8. print(r.status_code, r.text)

Cambiando el código con tu sugerencia el resultado es el mismo.

Un saludo.


Título: Re: [Python] Solicitud mediante método POST
Publicado por: engel lex en 12 Junio 2017, 23:14 pm
que resultado te da?


Título: Re: [Python] Solicitud mediante método POST
Publicado por: MA40 en 12 Junio 2017, 23:21 pm
una página en blanco


Título: Re: [Python] Solicitud mediante método POST
Publicado por: engel lex en 12 Junio 2017, 23:28 pm
como que una pagina en blanco?

esto es consola...

prueba el codigo con lo que te dejé y perfectamente me responde api key invalido


Título: Re: [Python] Solicitud mediante método POST
Publicado por: MA40 en 12 Junio 2017, 23:36 pm
Aquí se puede probar la dirección con el script en mi servidor:

##########

El código es:

Código
  1.    #!/usr/bin/python
  2.    # -*- coding: utf-8 -*-
  3.  
  4.    print "Content-type: text/html\n\n"
  5.    import requests
  6.  
  7.    r = requests.post("https://faucethub.io/api/v1/balance", data={'api_key': 'xxxxxxxxxxxxxxxxxxxxxxx'})
  8.    print(r.status_code, r.text)



Título: Re: [Python] Solicitud mediante método POST
Publicado por: engel lex en 12 Junio 2017, 23:40 pm
lo probaste en consola?


Título: Re: [Python] Solicitud mediante método POST
Publicado por: MA40 en 12 Junio 2017, 23:42 pm
No, voy a hacerlo y te digo,


Título: Re: [Python] Solicitud mediante método POST
Publicado por: MA40 en 12 Junio 2017, 23:55 pm
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?



Título: Re: [Python] Solicitud mediante método POST
Publicado por: engel lex en 13 Junio 2017, 00:03 am
Código:
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


Título: Re: [Python] Solicitud mediante método POST
Publicado por: MA40 en 13 Junio 2017, 00:13 am
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.


Título: Re: [Python] Solicitud mediante método POST
Publicado por: MA40 en 16 Junio 2017, 10:42 am
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.


Título: Re: [Python] Solicitud mediante método POST
Publicado por: engel lex en 16 Junio 2017, 13:22 pm
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)

Código
  1. url = 'http://myserver/post_service'
  2. data = urllib.urlencode({'name' : 'joe', 'age'  : '10'})
  3. req = urllib2.Request(url, data)
  4. response = urllib2.urlopen(req)
  5. print response.read()
  6.  


Título: Re: [Python] Solicitud mediante método POST
Publicado por: MA40 en 16 Junio 2017, 14:43 pm
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:

Código
  1. #!/usr/bin/python
  2. # -*- coding: utf-8 -*-
  3.  
  4. print "Content-type: text/html\n\n"
  5. import urllib2
  6.  
  7. req = urllib2.Request("https://faucethub.io/api/v1/balance", data={'api_key': 'xxxxxxxxxxxxxxxxxxxx'})
  8. 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:

Código
  1. #!/usr/bin/python
  2. # -*- coding: utf-8 -*-
  3.  
  4. print "Content-type: text/html\n\n"
  5. import urllib2
  6.  
  7. req = urllib2.Request("https://faucethub.io/api/v1/balance", data={'api_key': 'xxxxxxxxxxxxxxxxxxxx'})
  8. response = urllib2.urlopen(req)
  9. print """Hola mundo."""

¿A qué puede deberse?

Un saludo.


Título: Re: [Python] Solicitud mediante método POST
Publicado por: engel lex en 16 Junio 2017, 21:17 pm
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