Python 在请求中设置端口
我正在尝试使用Python使用Python 在请求中设置端口,python,networking,python-3.x,python-requests,Python,Networking,Python 3.x,Python Requests,我正在尝试使用Python使用cgminer的API。我对利用请求库特别感兴趣 我知道如何在请求中做基本的事情,但是cgminer想要更具体一点。我想做心理医生 import socket import json sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock.connect(('localhost', 4028)) sock.send(json.dumps({'command': 'summary'})) 改为使
cgminer
的API。我对利用请求
库特别感兴趣
我知道如何在请求
中做基本的事情,但是cgminer
想要更具体一点。我想做心理医生
import socket
import json
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.connect(('localhost', 4028))
sock.send(json.dumps({'command': 'summary'}))
改为使用请求
如何使用该库指定端口,如何发送这样的json请求并等待响应存储在变量中?是一个HTTP库
您可以在URL中指定端口
但是,据我所知,cgminer提供了一个API(或?)而不是一个接口。您可以像在浏览器中一样,使用冒号指定请求的端口,例如
r=requests.get('http://localhost:4028)
。这将一直阻止,直到收到响应,或者直到请求超时,所以您不必担心等待响应
您可以使用发送JSON数据作为POST请求,例如
然后可以使用r.text
或r.json()
访问响应
请注意,请求是一个HTTP库——如果不是您想要的HTTP,那么我认为使用请求是不可能的。作为一个通过艰苦的方式了解了python网络的一些常见陷阱的人,我添加这个答案是为了强调关于
请求的第一个参数的一个重要但容易搞乱的点。get()
:
localhost
是一个别名,您的计算机将其解析为127.0.0.1
,即它自己的环回适配器的IP地址foo.com
也是一个别名,只是在远离主机的地方可以解析
requests.get('foo.com:4028') #<--fails
requests.get('http://foo.com:4028') #<--works usually
我不太明白。这就是我发表评论的原因:是一个HTTP库。您可以在URL
http://example.com:4028/...
。据我所知,cgminer提供了一个rpcapi。但是它提供HTTP接口吗?也许这就是问题所在。感谢您的帮助。我已作为答案发布,因为您似乎确认了我的假设。172.0.0.1
对于localhost
是不正确的。它是127.0.0.1
。打字错误,或者这就是它失败的原因?这确实是它失败的原因。三重斜杠到底是怎么回事?文档中的文件在哪里<代码>//我试着用谷歌搜索,但没有找到任何有趣的东西。这是一个输入错误&在python中这是失败的(至少在3.6版本),但是一些浏览器(在Firefox上测试)似乎可以纠正这一错误。从技术上讲,http:///因此,从理论上讲,无论您首先遇到什么URI解析……对象/系统,都应该对您生气,或者尝试更正格式错误的请求。总之:nslookup
返回“找不到https:///google.com
”,python会抛出一个错误,Firefox会为您更正URL。
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
requests.get('http://{}:4028'.format(socket.gethostbyname(socket.gethostname()))) #<--works