跳转至

hyload 编程接口

hyload 工具的加压模块做在hyload库中, 提供了一套Python编程接口 给大家开发。

可以通过命令 pip install hyload 安装这个库。

虽然大部分的功能,可以通过代码助手自动产生,但是要做到灵活的控制,大家需要了解详细的接口和参数。

本文给出了这些接口和参数的具体说明。

HttpClient 对象

HttpClient 对象模拟一个客户端,它的初始化方法定义如下

def __init__(self, timeout=10, proxy=None)

参数 依次为

  • timeout

指定网络操作(比如连接)超时时间,整数类型。

缺省值为10秒

比如

# 超时时间设定为5秒
client = HttpClient(timeout=5) 
  • 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 等等

client.send('GET', '/api/path1')

也可以更简单一些,直接使用对应名称(转化为小写字母)的函数方法,比如 get/post/put/delete/patch/head

client.get('/api/path1')

两种方法,效果是一样的。

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')

后续消息可以省略 协议主机端口 前缀

client.get('/api/path1')

hyload发现省略了, 默认会用 上次使用的 协议主机端口

URL参数

如果你要发送的HTTP请求 有URL参数,有如下两种方式指定:

  • 直接在url中自己填入

url参数是问号后面的以&符隔开的,如下所示

client.get(
  'http://127.0.0.1/api/path1?p1=value1&p2=value2'
  )
  • 通过 params 参数指定

可以把url参数对应的键值对存入 字典 ,传给params,如下所示

client.get(
  'http://127.0.0.1/api/path1'
  params={
      'p1':'value1',
      'p2':'value2'
  }
  )

效果和上面的例子相同

消息体 - 概述

发送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/jsonapplication/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参数

比如

client.get(
    '/api/path1',
    # 通过headers传入指定消息头
    headers={
        'header1':'value1',
        'header2':'value2'
    })