在请求中设置端口

时间:2014-08-30 13:29:25

标签: python networking python-3.x python-requests

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

3 个答案:

答案 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.textr.json()可以访问回复。

请注意,请求是一个HTTP库 - 如果它不是您想要的HTTP,那么我不相信它可以使用请求。