Ejemplo del cliente python jsonrpc2 que se conecta al ejemplo remoto de hello world usando httplib?

Estoy tratando de crear un servidor jsonrpc2 que acepte json sobre http, procesará los datos y devolverá json al cliente solicitante.

Soy bastante nuevo en los servidores rpc y wsgi y solo lo he usado como parte de un webframework como django.

Estoy intentando seguir el ejemplo dado con la documentación de jsonrpc2. El primer paso es crear un archivo hello.py

def greeting(name): return dict(message="Hello, %s!" % name) 

El siguiente paso consiste en iniciar el servicio.

 runjsonrpc2 hello runserver :8080 

Sé que el servicio está funcionando ya que cuando uso un navegador en una máquina remota y navego a http://myip.dydns.org:8080 , responde con “405 Método no permitido” y veo información de depuración en el shell de mi servidor

 DEBUG:root:jsonrpc DEBUG:root:check method 

El siguiente paso es lo que me cuesta entender. Quiero saber cómo crear un cliente de Python para enviar json al servicio y obtener una respuesta.

Lo que intenté es:

 >>> from httplib import HTTPConnection >>> h = HTTPConnection("myip.dydns.org:8080") >>> from json import JSONEncoder >>> call_values = {'jsonrpc':'2.0', 'method':'greeting', 'id':'greeting'} 

¿Cuáles son los pasos necesarios para obtener la respuesta del servicio web mediante python?

Lamentablemente, la documentación de jsonrpc2 solo usa un TestApp de una biblioteca webtest para probar en localhost.

No pude encontrar ningún código de ejemplo de python que cree un cliente desde una máquina remota y obtenga una respuesta para la función de saludo.

¿Puede alguien ayudarme a empezar?

Edición: tengo un poco más lejos. Pero todavía no puedo obtener el contenido de la respuesta.

 >>> from httplib import HTTPConnection >>> con = HTTPConnection("myip.dyndns.org:8080") >>> import json >>> con.request('POST', '/', json.dumps({"jsonrpc": "2.0", "method": "casoff_jsonrpc2.greeting", "id":1.0,"params":{"name":"harijay"}},ensure_ascii=False).encode('utf-8'), {'Content-Type': 'application/json;charset=utf-8'}) 

Veo que el servidor se hace eco de su shell.

 DEBUG:root:jsonrpc DEBUG:root:check method DEBUG:root:check content-type DEBUG:root:response {"jsonrpc": "2.0", "id": 1.0, "result": {"message": "Hello, harijay!"}} 

Pero en el cliente. No sé cómo obtener el resultado.

edit2: finalmente resolví esto

Todo lo que tenía que hacer era

 >>> con.getresponse().read() 

Prueba excelentes requests paquetes

Si tiene la intención de hacer cualquier cosa con los clientes http en Python, recomendaría encarecidamente las requests aprendizaje: es un orden de magnitud más fácil de aprender y usar que cualquier otro módulo relacionado con http en Python y para mí se convirtió en una especie de razor suiza al experimentar. sobre http.

El ejemplo de cómo usar si para JSON-RPC está aquí: https://stackoverflow.com/a/8634905/346478