2014-08-30 56 views
9

我试图使用cgminer的API使用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请求并等待将响应存储在变量中?

+0

我不确定理解。这就是为什么我发表评论:[请求](http://docs.python-requests.org/en/latest/)是一个HTTP库。您可以在URL http://example.com:4028/...中指定端口。从我可以匆匆阅读的内容(这里)(https:// github。com/ckolivas/cgminer/blob/master/API-README)'cgminer'提供了一个RPC API。但它提供了一个HTTP接口吗? – 2014-08-30 13:40:57

+0

也许就是这个问题。谢谢你的帮助。 – 2mac 2014-08-30 13:52:42

+0

我已重新张贴为答案,因为您似乎确认了我的设想。 – 2014-08-30 13:59:18

回答

0

您可以使用冒号指定请求的端口,就像在浏览器中一样,如 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.textr.json()

请注意,请求是一个HTTP库 - 如果它不是HTTP,那么我不认为有可能使用请求。

3

正如有人谁也学到了一些蟒蛇的网络硬盘的方式常见的缺陷,我加入这个答案要强调的一个重要但很容易混乱安装点左右的requests.get()1 ARG :

localhost是您的计算机解析为其自己的回送适配器的IP地址127.0.0.1的别名。 foo.com也是一个别名,只是一个远离主机而解决的问题。

requests.get('foo.com:4028')    #<--fails 
requests.get('http://foo.com:4028')   #<--works usually 
requests.get('http:///www.foo.com:4028') #<--works almost always 

&为回环:

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 
+1

'localhost'的'172.0.0.1'不正确。它是'127.0.0.1'。错字,或者这就是为什么它失败了? – 2mac 2017-04-09 00:22:36