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'})) 改为使

我正在尝试使用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'}))
改为使用
请求

如何使用该库指定端口,如何发送这样的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