[Python-es] Duda sobre http post

Rafael Gomes rggg88 en hotmail.com
Mie Mar 27 16:37:04 CET 2013


Buenas tardes amigos todo bien? 
Espero que este todo bien con ustedes. 
Disculpen molestar, pero despues de entender y trabajar un poco con el rest api con la ayuda de bootle, me puse a hacer unas funciones para hacer post, y get de un servidor simple, solo que la funcion me queda en ciclo infinito. 

Mi idea es la siguiente tengo mi servidor con la siguiente estructura: 

from bottle import run, get, post, request, error, route
import httplib
from json import loads,dumps
from funcoes_links import get_links, matriz_links, record_links, list_port_links, matriz_adjacencia, matriz_adjacencia_bw
from funcoes_interfaces import get_interfaces,get_ovs, get_port,get_interface_list, get_list_port_host, get_list_lb
from funcoes_estatisticas import get_statistics, matriz_statistics, filter_statistics
from funcoes_rest_api import keep_list, send_info_to_list, topologia

@get('/monitoring/topology')
def monotoring_form():
        ma,ma_bw=topologia()
        return {"Topologia_phy": ma,"Topologia_bw": ma_bw}

@post('/monitoring')
def get_endpoint():
        fich = request.json
        ip=keep_list(fich) 
# La funcion anterior, al ser enviado un curl de la siguiente forma: curl -H "Accept: application/json" -H "Content-type: application/json" -X POST http://193.136.93.140:8081/monitoring -d '{"endpoint":"/brain/topology"}' -v  me busca la direccion ip o sea /brain/topology
        send_info_to_list(ip) 
# Esta funcion quiero que envie para la direccion ip anterior, esto es, /brain/topology envie la informacion de la topologia de mi red, para eso utilizo la peticion post de la httplib

@post('/brain/topology')
def post_brain():
        fich=request.json
        ip=keep_list(fich)
        print ip


Las funciones keep_list y send_info_to_list(ip) tienen la siguiente estructura:


def keep_list(lista):
        list_ip=[]
        novo_ip=lista['endpoint']
        if novo_ip not in list_ip:
                list_ip.append(novo_ip)
        return list_ip

def send_info_to_list(lista):
        for ip in lista:
                print repr(ip)
                params2,params = topologia()
                params =json.dumps(params)
                params2=json.dumps(params2)
                headers = {'Content-type': 'application/json',
                           'Accept': 'application/json'}
                print 'aqui'
                conn = httplib.HTTPConnection("193.136.93.140:8081")
                print 'aqui2'
                conn.request("POST", ip, params, headers)
                print 'aqui3'
                response = conn.getresponse()
                print response.status
                data = response.read()
                print data
                conn.request("POST", ip, params2, headers)
                response = conn.getresponse()
                print response.status
                print 'resp2' + str(response)
                data =response.read()
                print 'data2' + str(data)
                conn.close()

def topologia():
        info_links =get_links()
        info_interfaces=get_interfaces()
        info,links=matriz_links(info_links)
        switch=get_ovs(info_interfaces)
        portos=list_port_links(info,switch)
        matriz_adjacente=matriz_adjacencia(links,switch)
        matriz_interface=get_port(info_interfaces)
        lista_host=get_interface_list(matriz_interface, portos, switch)
        lista_portos_host=get_list_port_host(matriz_interface,portos,switch)
        lista_sw"Topologia_phy":itch_bw, lista_host_bw=get_list_lb(matriz_interface,portos,switch)
        matriz_bw=matriz_adjacencia_bw(links,switch,lista_switch_bw)
        return matriz_adjacente, matriz_bw # devuelve la información de la siguiente forma: 
matriz_bw= [[0, "100MbFD"], ["100MbFD", 0]]
matriz_adjacente= [[0, 1], [1, 0]]}
El problema esta en la funcion send_info_to_list, pues sin ella no me da errores, solo que ya experimente varias ideas para aquello y no consigo.

En el terminal que hago el post manual me queda asi: 

curl -H "Accept: application/json" -H "Content-type: application/json" -X POST http://193.136.93.140:8081/monitoring -d '{"endpoint":"/brain/topology"}' -v 
* About to connect() to 193.136.93.140 port 8081 (#0)
*   Trying 193.136.93.140... connected
> POST /monitoring HTTP/1.1
> User-Agent: curl/7.22.0 (x86_64-pc-linux-gnu) libcurl/7.22.0 OpenSSL/1.0.1 zlib/1.2.3.4 libidn/1.23 librtmp/2.3
> Host: 193.136.93.140:8081
> Accept: application/json
> Content-type: application/json
> Content-Length: 30
> 
* upload completely sent off: 30out of 30 bytes
y no avanza pienso que la funcion queda en ciclo infinito.

Si me pueden ayudar agradecia, si necesitan de otro tipo de informacion o asi digan que trato de me explicar mejor. 

Muchas gracias por vuestro tiempo ayuda y disponibilidad.

Saludos cordiales, 
Rafael.
 		 	   		  
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://mail.python.org/pipermail/python-es/attachments/20130327/24614187/attachment.html>


Más información sobre la lista de distribución Python-es