Ответ 1
Request - это HTTP-библиотека.
Вы можете указать порт в URL http://example.com:4028/....
Но, из того, что я могу читать в спешке здесь cgminer
предоставляет RPC API ( или JSON RPC?) не интерфейс HTTP.
Я пытаюсь использовать API cgminer
, используя Python. Мне особенно интересно использовать библиотеку requests
.
Я понимаю, как делать основные вещи в requests
, но cgminer
хочет быть немного более конкретным. Я хотел бы сжать
import socket
import json
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.connect(('localhost', 4028))
sock.send(json.dumps({'command': 'summary'}))
используя requests
.
Как указать порт, используя эту библиотеку, и как отправить такой запрос json и ждать ответа, который будет храниться в переменной?
Request - это HTTP-библиотека.
Вы можете указать порт в URL http://example.com:4028/....
Но, из того, что я могу читать в спешке здесь cgminer
предоставляет RPC API ( или JSON RPC?) не интерфейс HTTP.
Как человек, который на собственном опыте усвоил некоторые из распространенных ошибок в работе с питоном, я добавляю этот ответ, чтобы подчеркнуть важный, но несложный для запутывания пункт о первом аргументе request.get requests.get()
:
localhost
- это псевдоним, который ваш компьютер разрешает в 127.0.0.1
, IP-адрес своего собственного адаптера обратной связи. foo.com
- также псевдоним, только тот, который решается дальше от хоста.
requests.get('foo.com:4028') #<--fails
requests.get('http://foo.com:4028') #<--works usually
& для петель:
requests.get('http://127.0.0.1:4028') #<--works
requests.get('http://localhost:4028') #<--works
этот требует import socket
и дает вам локальный ip вашего хоста (он же ваш адрес в вашей локальной сети); он идет немного дальше от хоста, чем просто вызывает localhost
, но не до самого открытого интернета:
requests.get('http://{}:4028'.format(socket.gethostbyname(socket.gethostname()))) #<--works
Вы можете указать порт для запроса с двоеточием так же, как и в браузере, например
r = requests.get('http://localhost:4028')
. Это будет заблокировано до тех пор, пока не будет получен ответ, или пока запрос не истечет, так что вам не нужно беспокоиться о ожидании ответа.
Вы можете отправить данные JSON в виде запроса POST с помощью метода requests.post
с параметром data
, например
import json, requests
payload = {'command': 'summary'}
r = requests.post('http://localhost:4028', data=json.dumps(payload))
Доступ к ответу возможен с помощью r.text
или r.json()
.
Обратите внимание, что запросы - это HTTP-библиотека - если это не HTTP, который вы хотите, я не считаю возможным использовать запросы.