我尝试使用Python来使用cgminer
的API。我对使用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请求并等待响应存储在变量中?
答案 0 :(得分:13)
Request是一个HTTP库。
您可以在网址http://example.com:4028/ ....
中指定端口但是,从我能匆忙阅读的内容here cgminer
提供了RPC API(或JSON RPC?)而不是 { {3}}界面。
答案 1 :(得分:13)
作为一个以艰难的方式了解了python网络的一些常见陷阱的人,我正在添加这个答案,以强调关于 1st arg of {的一个重要但容易搞乱的观点。 {1}} 强>:
requests.get()
是您的计算机解析为localhost
的别名,它是自己的环回适配器的IP地址。 127.0.0.1
也是一个别名,只是一个可以远离主机解析的别名。
foo.com
&安培; for loopbacks:
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
&amp;为您提供主机的本地IP(也就是您在自己的局域网内的地址);它离主机比离import socket
更远,但不是一直到开放互联网:
localhost
答案 2 :(得分:1)
您可以使用冒号指定请求的端口,就像在浏览器中一样,例如
r = requests.get('http://localhost:4028')
。这将阻止直到收到响应,或者直到请求超时,因此您不必担心等待响应。
您可以使用requests.post
method with the data
parameter将JSON数据作为POST请求发送,例如
import json, requests
payload = {'command': 'summary'}
r = requests.post('http://localhost:4028', data=json.dumps(payload))
然后,r.text
或r.json()
可以访问回复。
请注意,请求是一个HTTP库 - 如果它不是您想要的HTTP,那么我不相信它可以使用请求。