Estoy intentando hacer uso de la API de cgminer usando Python. Estoy particularmente interesado en utilizar la biblioteca requests.

Entiendo cómo hacer cosas básicas en requests, pero cgminer quiere ser un poco más específico. Me gustaría encoger

import socket
import json

sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.connect(('localhost', 4028))

sock.send(json.dumps({'command': 'summary'}))

Usando requests en su lugar.

¿Cómo se especifica el puerto usando esa biblioteca, y cómo se envía una solicitud json de este tipo y se espera una respuesta para almacenarla en una variable?

19
2mac 30 ago. 2014 a las 17:29

2 respuestas

La mejor respuesta

Request es una biblioteca HTTP.

Puede especificar el puerto en la URL http://example.com:4028/....

Pero, por lo que puedo leer con prisa, aquí cgminer proporciona un RPC API (o JSON RPC?) no una HTTP interfaz.

13
Sylvain Leroux 30 ago. 2014 a las 13:57

Puede especificar el puerto para la solicitud con dos puntos tal como lo haría en un navegador, como r = requests.get('http://localhost:4028'). Esto se bloqueará hasta que se reciba una respuesta, o hasta que se agote el tiempo de la solicitud, por lo que no debe preocuparse por esperar una respuesta.

Puede enviar datos JSON como una solicitud POST utilizando Método requests.post con el parámetro data, como

import json, requests
payload = {'command': 'summary'}
r = requests.post('http://localhost:4028', data=json.dumps(payload))

Entonces es posible acceder a la respuesta con r.text o r.json().

Tenga en cuenta que las solicitudes son una biblioteca HTTP: si no es HTTP lo que desea, entonces no creo que sea posible usar solicitudes.

2
Kkelk 30 ago. 2014 a las 14:02