自学内容网 自学内容网

【python自动化五】接口自动化基础--requests的使用

python的接口请求可以用requests库,这个介绍就不多说了,网上说得很详细。
接下来直接记录下如何使用(当然也不限于自动化的使用)

1.安装requests

requests也需要安装一下

 pip install requests

在这里插入图片描述

2.requests请求

1.常用的请求方法

接口请求通常有get/post/put/delete等类型,我们可以直接根据这种类型请求调用方法,例如:

requests.get(url='')
requests.post(url='', data='')

这里我自己写了个简单的服务,用于测试接口请求,如下图能正常请求到接口数据。
在这里插入图片描述
当然还有其他方法:
在这里插入图片描述
上面是用到哪个类型的请求调用哪个类型,当然也有统一的方法

requests.request(method='',url='')  # :param method: method for the new :class:`Request` object: ``GET``, ``OPTIONS``, ``HEAD``, ``POST``, ``PUT``, ``PATCH``, or ``DELETE``.

在这个方法中传入method参数即可,要调用get接口,就传入‘GET’,要调用post接口,就传入‘POST’。
在这里插入图片描述
如上图所示,也能调用成功。
这里我们也可以看一下get方法的具体调用
在这里插入图片描述
其实就是get方法里调用了request方法,所有请求方法都是基于request方法的。

2.请求参数

这里附上request方法中注释,里面解释了各个参数的含义:

"""Constructs and sends a :class:`Request <Request>`.

    :param method: method for the new :class:`Request` object: ``GET``, ``OPTIONS``, ``HEAD``, ``POST``, ``PUT``, ``PATCH``, or ``DELETE``.
    :param url: URL for the new :class:`Request` object.
    :param params: (optional) Dictionary, list of tuples or bytes to send
        in the query string for the :class:`Request`.
    :param data: (optional) Dictionary, list of tuples, bytes, or file-like
        object to send in the body of the :class:`Request`.
    :param json: (optional) A JSON serializable Python object to send in the body of the :class:`Request`.
    :param headers: (optional) Dictionary of HTTP Headers to send with the :class:`Request`.
    :param cookies: (optional) Dict or CookieJar object to send with the :class:`Request`.
    :param files: (optional) Dictionary of ``'name': file-like-objects`` (or ``{'name': file-tuple}``) for multipart encoding upload.
        ``file-tuple`` can be a 2-tuple ``('filename', fileobj)``, 3-tuple ``('filename', fileobj, 'content_type')``
        or a 4-tuple ``('filename', fileobj, 'content_type', custom_headers)``, where ``'content_type'`` is a string
        defining the content type of the given file and ``custom_headers`` a dict-like object containing additional headers
        to add for the file.
    :param auth: (optional) Auth tuple to enable Basic/Digest/Custom HTTP Auth.
    :param timeout: (optional) How many seconds to wait for the server to send data
        before giving up, as a float, or a :ref:`(connect timeout, read
        timeout) <timeouts>` tuple.
    :type timeout: float or tuple
    :param allow_redirects: (optional) Boolean. Enable/disable GET/OPTIONS/POST/PUT/PATCH/DELETE/HEAD redirection. Defaults to ``True``.
    :type allow_redirects: bool
    :param proxies: (optional) Dictionary mapping protocol to the URL of the proxy.
    :param verify: (optional) Either a boolean, in which case it controls whether we verify
            the server's TLS certificate, or a string, in which case it must be a path
            to a CA bundle to use. Defaults to ``True``.
    :param stream: (optional) if ``False``, the response content will be immediately downloaded.
    :param cert: (optional) if String, path to ssl client cert file (.pem). If Tuple, ('cert', 'key') pair.
    :return: :class:`Response <Response>` object
    :rtype: requests.Response

    Usage::

      >>> import requests
      >>> req = requests.request('GET', 'https://httpbin.org/get')
      >>> req
      <Response [200]>
    """

这里简单介绍下:

参数含义
method方法,即是‘GET’、‘POST’或者其它
url请求URL
params可选,查询参数,常见于接口url的?后跟的请求参数
data可选,接口请求的body
json可选,接口请求中json化的body体
headers可选,接口请求的header
cookies可选,接口请求的cookie
files可选,文件参数,常用于上传文件的接口
auth可选,认证参数
timeout可选,请求最大等待时间,超时报错
allow_redirects可选,是否允许重定向,一般登录时重定向发生得比较多
proxies可选,可设置代理
verify可选,用于设置SSL证书验证。如果设置为False,将忽略SSL证书验证。
stream可选,设置下载的方式,如果设置为False,则整个文件将一次性下载下来
cert可选, 证书路径

具体类型的请求方法除了method 入参,其他参数基本都是一致的。
我们用得比较多的就是url、params、data、json、headers、cookies参数。这里简单介绍下,照样举一个get和post的例子。
我们实现一个get接口,根据params不同,返回不同的结果

params1 = {
    'param1': 'test1',
    'param2': 'test2'
}
get_res1 = requests.request(method='GET',url='http://ip:port/get/test1', params=params1)

在这里插入图片描述
我们直接在url中传也可以,但是这样有时候会不方便修改入参,看情况选取

get_res1 = requests.request(method='GET',url='http://ip:port/get/test1?param1=test1&param2=test2')

在这里插入图片描述
接下来介绍下json和data的用法,它们都是用来传body体的。
我们主要介绍下需要传入json的body的情况,很多请求是需要请求body是json的格式,我们有如下方法:
1.使用data传入

header = {
    'Content-Type': 'application/json'
}
data = {
    'body_data1': 'test3',
    'body_data2': 'test4'
}
post_res1 = requests.request(method='POST',url='http://ip:port/post/test1', headers=header, data=json.dumps(data))

在这里插入图片描述
注意header和json.dumps(data))缺一不可
2.使用json传入

data = {
    'body_data1': 'test3',
    'body_data2': 'test4'
}
post_res1 = requests.request(method='POST',url='http://ip:port/post/test1', json=data)

在这里插入图片描述
可以看到使用json时,我们无需在headers里注明Content-Type,它自动传入的就是json格式的。
总结如下:
1.当使用json时,如果不指定headers中的content-type,默认为application/json。
2.data为dict时,如果不指定content-type,默认为application/x-www-form-urlencoded,相当于普通form表单提交的形式;如果需要传json格式,需要在headers里指明对应的Content-Type。
如果我们是要传json格式的body体,直接用json比较方便,如果是其他格式,则我们选用data传参;实际使用时按个人实际需要选取。
还有比较常用的header和cookie,这些主要涉及到安全方面,后面爬虫的时候再细说。

3.requests响应

每次调用 requests 请求之后,会返回一个 response 对象,该对象包含了具体的响应信息,如状态码、响应头、响应内容等,下方列举了一些常见的响应信息:

参数含义
ok检查 “status_code” 的值,如果小于400,则返回 True,如果不小于 400,则返回 False
is_redirect如果响应被重定向,则返回 True,否则返回 False
is_permanent_redirect如果响应是永久重定向的 url,则返回 True,否则返回 False
next返回重定向链中下一个请求的 PreparedRequest 对象
apparent_encoding编码方式
iter_content迭代响应
iter_lines迭代响应的行
content返回响应的内容,以字节为单位
text返回响应的内容,unicode 类型数据
json返回结果的 JSON 对象 (结果需要以 JSON 格式编写的,否则会报错)
links返回响应的解析头链接
raise_for_status如果发生错误,方法返回一个 HTTPError 对象
close释放与连接池的连接
cookies返回一个 CookieJar 对象,包含了从服务器发回的 cookie
headers返回响应头,字典格式
status_code返回 http 的状态码,比如 200

调用时直接.一下对应的方法即可,我们比较常用的就是status_code,headers,cookies,text,content等
在这里插入图片描述
到这里就是requests的简单运用了,当然实际情况一般比举的例子要复杂,使用时也需要进行进一步的封装。这个后面接着来…


原文地址:https://blog.csdn.net/evelol7/article/details/144325491

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!