hyload 编程接口
hyload 工具的加压模块做在hyload库中, 提供了一套Python编程接口 给大家开发。
可以通过命令 pip install hyload
安装这个库。
虽然大部分的功能,可以通过代码助手自动产生,但是要做到灵活的控制,大家需要了解详细的接口和参数。
本文给出了这些接口和参数的具体说明。
HttpClient 对象
HttpClient 对象模拟一个客户端,它的初始化方法定义如下
参数 依次为
- timeout
指定网络操作(比如连接)超时时间,整数类型。
缺省值为10秒
比如
- proxy
指定代理
127.0.0.1:8888
通常不需要设置此参数
发送请求
发起请求可以使用 send方法,定义如下
def send(
self,
method,
url,
params=None,
headers=None,
data=None,
json=None,
debug:bool=False,
debug_body_print_max_len=4096,
request_body_encoding=None,
response_body_encoding=None
):
method 请求方法
发送HTTP请求的 方法
,由 method
参数指定,比如 GET、POST、PUT、DELETE、PATCH、HEAD 等等
也可以更简单一些,直接使用对应名称(转化为小写字母)的函数方法,比如 get/post/put/delete/patch/head
两种方法,效果是一样的。
url
发送HTTP请求的 URL
,由 url
参数指定。
第一次调用send 发送消息,必须指定 协议主机端口 前缀,比如
client.send(
'POST',
'http://127.0.0.1/api/mgr/signin',
data={
'username':'byhy',
'password':'88888888'
},
)
client.get('https://www.yourwebsite.com/your/url/path')
后续消息可以省略 协议主机端口 前缀
hyload发现省略了, 默认会用 上次使用的 协议主机端口
URL参数
如果你要发送的HTTP请求 有URL参数,有如下两种方式指定:
- 直接在url中自己填入
url参数是问号后面的以&符隔开的,如下所示
- 通过 params 参数指定
可以把url参数对应的键值对存入 字典
,传给params,如下所示
效果和上面的例子相同
消息体 - 概述
发送HTTP请求的消息体中的数据 由 data、json、encoding
这3个参数决定。
首先大家要了解一个基本常识:
不管你的消息体中的数据是字符串、图像、视频 或者是你们自定义的数据格式,最终HTTP请求发送的消息体,都是一个个字节组成的 字节串
。
大多数情况下,API接口消息的 消息体 都是字符串, 需要编码为字节串发送。
消息体 - 字符串数据
大多数情况下,API接口消息的 HTTP请求消息体 都是字符串数据。
根据接口设计,字符串消息体有不同的格式,比如 JSON、XML、UrlEncoded
json格式
如果消息体是json格式的字符串(目前非常普遍),可以使用 json 参数,直接把数据对象传递给json参数
比如一个添加朋友的API接口,可以像这样
client.post(
'/api/path1',
# 通过json传入指定json格式的消息体参数
json={
'action':'addfriends'
'userid': 3344,
'friends': [3242,234545,232]
}
)
消息体字符串最终编码为字节串的时候,使用encoding参数指定的编码方式,缺省是utf8编码
比如,你可以这样指定gbk编码方式
client.post(
'/api/path1',
# 通过json传入指定json格式的消息体参数
data={
'action':'addfriends'
'userid': 3344,
'friends': ['白月黑羽','紫气一元']
},
request_body_encoding = 'gbk'
)
UrlEncoded 格式
如果消息体是UrlEncoded 格式的字符串 ,可以使用 data 参数,直接把 数据对象
传递给data参数
比如一个添加朋友的API接口,可以像这样
client.post(
'/api/path1',
# 通过data传入指定urlencode格式的消息体参数
# urlencode格式所有参数键值对只能是字符串格式
data={
'action':'addfriends'
'userid': '3344',
'friends': '3242,234545,232'
})
同样的,消息体字符串最终编码为字节串的时候,使用encoding参数指定的编码方式,缺省是utf8编码
其他字符串格式
如果消息体是其他格式的字符串,比如 XML、YAML、 TOML 或者你们自己定义的字符串格式,还是可以使用 data 参数。
需要你们自己把最终的产生的 字符串
传递给data参数。
而且,要设定 相应的HTTP消息头 Content-Type
, 指定消息类型。
比如
client.post(
'/api/path1',
headers={
# 说明消息体是 xml格式
'Content-Type':'application/xml'
}
# 下面填写内容
data='''
<?xml version="1.0" encoding="UTF-8"?>
<CreateBucketConfiguration>
<StorageClass>Standard</StorageClass>
</CreateBucketConfiguration>
'''
)
前面的json格式 和 urlencoded 格式 不需要像这样指定消息头,我们的库会自动帮你指定为 application/json
和 application/x-www-form-urlencoded
同样的,消息体字符串最终编码为字节串的时候,使用encoding参数指定的编码方式,缺省是utf8编码
消息体 - 字节数据
如果你的消息体不是纯字符串,而是其他二进制数据,比如 图片、视频、或者你们自己定义的消息体格式,
还是可以使用 data 参数。
需要你们自己把最终的产生的 字节串bytes对象
传递给data参数。
比如
client.post(
'/api/path1',
headers={
# 说明消息体是哪种格式
'Content-Type':'application/3gpp'
}
# 下面填写bytes的内容,注意最后的编码格式
data=b'\x9f\x5c\x56\x90\xee\x34\x5c\x90\xee\x34\x56\x90'
)
消息头
发起的HTTP请求,如果有特殊消息头设置,可以使用 headers参数指定。
直接把消息头对应的 一个个键值对数据 放在 字典
中, 传递给headers参数
比如