__________     __ __     __  _______    ________
  / ____/ __ \   / // /    / / / /  _/ |  / / ____/
 / / __/ / / /  / // /_   / /_/ // / | | / / __/
/ /_/ / /_/ /  /__  __/  / __  // /  | |/ / /___
\____/\____/     /_/    /_/ /_/___/  |___/_____/

 --- A GOPHER-LIKE INTERFACE FOR HIVE BLOCKCHAIN ---

每天进步一点点:Python中使用urllib3访问STEEM RPC

BY: @oflyhigh | CREATED: Feb. 25, 2018, 1:33 p.m. | VOTES: 154 | PAYOUT: $114.07 | [ VOTE ]

在之前的文章中,我们学习在Python中使用Requests访问STEEM RPCPython中使用urllib访问STEEM RPCPython中使用PycURL访问STEEM RPC,原本这三把板斧足够我用了,但是阅读好些代码都是用的urllib3,所以拿来试试啦。

[IMAGE: https://steemitimages.com/DQmXQzDMbiUMFVUWX8A9qodarzSPfjvgJH9NufV46enHncb/image.png]
(图源:bing.com

介绍

urllib3是一个强大的、健全友好的Python HTTP客户端,包括requests、pip在内的很多Python生态系统都使用了urllib3。

urllib3具有如下特性:
* 线程安全
* 连接池
* 客户端SSL/TLS校验
* 多部分编码文件上传
* 请求重试以及HTTP重定向
* gzip以及deflate编码
* HTTP以及SOCKS代理
* 100%测试覆盖

安装

urllib3是第三方的库,所以使用之前需要先安装。

pip安装的指令为:
pip install urllib3

因为我安装过requests,所以会提示我已经安装啦。

代码

继续拿我们之前的命令为例来学习:

>curl --data '{"jsonrpc": "2.0", "method": "call", "params": ["account_by_key_api", "get_key_references", [["STM6MGdForcZ8HskcguP84QSCb8udgz7W9yUPU5jtsAKQAxth3U16"]]], "id": 1}' https://api.steemit.com

使用urllib3改写后的简单代码为:

import urllib3
import json

payload = {"jsonrpc": "2.0", "method": "call", "params": ["account_by_key_api", "get_key_references", [["STM6MGdForcZ8HskcguP84QSCb8udgz7W9yUPU5jtsAKQAxth3U16"]]], "id": 1}
rpc = "https://api.steemit.com"

http = urllib3.PoolManager()
r = http.request('POST', rpc, body=json.dumps(payload).encode('utf-8'))
print(r.data.decode('utf-8'))

结果

执行结果为:
>InsecureRequestWarning: Unverified HTTPS request is being made. Adding certificate verification is strongly advised. See: https://urllib3.readthedocs.io/en/latest/advanced-usage.html#ssl-warnings InsecureRequestWarning) {"id":1,"result":[["oflyhigh"]]}

加上这样一句就好啦
urllib3.disable_warnings()
[IMAGE: https://steemitimages.com/DQmWxUdaVa77QNb3WRXooSitp7dyTipXUhwFZos1sfgUm4v/image.png]

但是实际使用中,不校验证书是不安全、不被提倡的做法。如何校验证书,将在其它文章中另行阐述。

高级功能

类似keep-alive等高级功能可以通过在构建urllib3.PoolManager类实例时通过参数指定。

**********
比如Keep-Alive功能,需要在上述代码中加入如下内容:

from urllib3.connection import HTTPConnection
socket_options = HTTPConnection.default_socket_options + \
[(socket.SOL_SOCKET, socket.SO_KEEPALIVE, 1), ]
http = urllib3.poolmanager.PoolManager(socket_options=socket_options)

*********
注:这段代码我理解有误,并非用于实现Keep-Alive功能

更多功能和详情,参考用户手册吧。

参考链接

TAGS: [ #python ] [ #urllib3 ] [ #steem ] [ #cn-programming ] [ #cn ]

Replies

@farah-kamran | Feb. 25, 2018, 1:35 p.m. | Votes: 0 | [ VOTE ]

all commands are useful and easy

@pengenkaya | Feb. 25, 2018, 1:45 p.m. | Votes: 0 | [ VOTE ]

Hy friend very very good post thanks for you

@zulfikrizal | Feb. 25, 2018, 2:01 p.m. | Votes: 0 | [ VOTE ]

Very good picture and your story

@hamidi103 | Feb. 25, 2018, 2:30 p.m. | Votes: 0 | [ VOTE ]

Good luck @oflyhigh

@playnet | Feb. 25, 2018, 6:41 p.m. | Votes: 0 | [ VOTE ]

Buen post! Gracias por compartir.

@carlosgerdet | Feb. 25, 2018, 7:06 p.m. | Votes: 0 | [ VOTE ]

Muy bueno, amigo, te seguiré aunque estés en otro idioma

@hotpacks | March 1, 2018, 11:51 a.m. | Votes: 0 | [ VOTE ]

Upvoted ☝ Have a great day!

[ BACK TO TRENDING ] [ BACK TO MENU ]
CMD>