在请求中设置端口

2024-09-27 23:23:54 发布

您现在位置:Python中文网/ 问答频道 /正文

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


Tags: importapijsonlocalhoststreamconnectsocket事情
3条回答

作为一个很难理解python网络的一些常见陷阱的人,我添加这个答案是为了强调一个重要但容易混淆的要点,即requests.get()第一个参数:

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://127.0.0.1:4028')       #<--works
requests.get('http://localhost:4028')       #<--works

这一个需要import socket&;为您提供主机的本地ip(也就是您在自己局域网中的地址);它与主机的距离比只调用localhost要远一点,但不是一直到开放的internet:

requests.get('http://{}:4028'.format(socket.gethostbyname(socket.gethostname())))  #<--works

Request是一个HTTP库。

您可以在URL http://example.com:4028/….中指定端口。。。。

但是,从我可以快速阅读的内容来看,herecgminer提供了一个RPCAPI(或者JSON RPC?)不是一个HTTP接口。

您可以用冒号指定请求的端口,就像在浏览器中一样,例如 r = requests.get('http://localhost:4028')。在收到响应或请求超时之前,这将被阻塞,因此您不必担心等待响应。

可以使用^{} method with the ^{} parameter将JSON数据作为POST请求发送,例如

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

然后可以使用r.textr.json()访问响应。

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

相关问题 更多 >

    热门问题