在请求中设置端口
我正在尝试用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 个回答
3
你可以像在浏览器里一样,通过在请求的地址后面加上冒号来指定端口,比如说
r = requests.get('http://localhost:4028')
。这个请求会一直等到收到响应,或者超时为止,所以你不用担心要等待响应。
如果你想发送JSON数据,可以使用requests.post
方法,并加上data
参数,比如说
import json, requests
payload = {'command': 'summary'}
r = requests.post('http://localhost:4028', data=json.dumps(payload))
然后你可以通过r.text
或者r.json()
来获取响应内容。
需要注意的是,requests是一个HTTP库,如果你要的不是HTTP的请求,那我觉得用requests是不行的。
27
作为一个在学习Python网络编程时遇到了一些常见问题的人,我想分享一个很重要但容易搞错的点,关于requests.get()
的第一个参数:
localhost
是一个别名,你的电脑会把它解析成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
要更进一步,但还没有到达开放的互联网。
requests.get('http://{}:4028'.format(socket.gethostbyname(socket.gethostname()))) #<--works