前言
说到python发送HTTP请求进行接口自动化测试,脑子里第一个闪过的可能就是requests库了,当然python有很多模块可以发送HTTP请求,包括原生的模块http.client,urllib2等,但由于原生的模块过于复杂,使用繁琐,那么requests库就诞生了,它也是现阶段比较流行的接口自动化测试工具之一。
requests是个第三方库,封装了HTTP请求的所有方法,使用方便简单,只需要根据不同的请求方式调用相对应的方法就可以完成发送网络请求的整个过程,那么今天我们就来说说requests库是如何使用的,那么在开始之前我们大致说一下今天的主要内容:
1. requets如何发送get请求
2. requests如何发送post请求
3. params参数和data参数的区别
4. requests库中Session类的的妙用
5. 针对get请求和post请求,对requests进行简单封装
一、安装
通常,我们使用第三方库之前,都需要先进行安装
cmd执行命令 pip install requests 接着就可以引入该模块使用其提供的方法了
import requests
二、发送get请求
requests是通过调用get()方法来完成发送get请求的,那么,在掌握requests库如何发送get请求之前,你还应该简单了解一下什么是get请求
通常在我们学习一个方法如何使用之前,我们需先知道这个方法需要哪些参数?参数类型是什么? 那么我们就先分析一下get()方法的源码
1 def get(url, params=None, **kwargs):
2 r"""Sends a GET request.
3
4 :param url: URL for the new :class:`Request` object.
5 :param params: (optional) Dictionary, list of tuples or bytes to send
6 in the body of the :class:`Request`.
7 :param \*\*kwargs: Optional arguments that ``request`` takes.
8 :return: :class:`Response <Response>` object
9 :rtype: requests.Response
10 """
11
12 kwargs.setdefault('allow_redirects', True)
13 return request('get', url, params=params, **kwargs)
这就是get方法的源码了,你应该能够发现,get()方法只有一个必传的参数url,其他参数都是非必传的,那么其他的参数有什么作用呢?
三、params
对于这个参数,可以是字典,也可以是嵌套元组的列表,基于get请求的特点,请求参数是可以直接跟在URL之后的,以?号开始以key=value的形式传递(多个参数使用&符号进行分割),但是为了明确区分URL和参数,就需要使用params参数传递
**kwargs:其他一些关键字参数,暂时不做介绍
接下来我们来看2个简单的实例,体会一下reauets通过get()方法发送一个不带参数的get请求和带参数的请求的过程
通过get()方法发送get请求访问博客园首页
"""
import requests # 导入requests模块
response = requests.get('https://www.cnblogs.com/') # 发送get请求
print(response.text) # 获取响应数据
响应数据
<!DOCTYPE html>
<html lang="zh-cn">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<meta name="referrer" content="always" />
<title>头条号 - 代码改变世界</title>
<meta name="keywords" content="开发者,头条号,开发者,程序猿,程序媛,极客,编程,代码,开源,IT网站,Developer,Programmer,Coder,Geek,技术社区" />
<meta name="description" content="是一个面向开发者的知识分享社区。自创建以来,一直致力并专注于为开发者打造一个纯净的技术交流社区,推动并帮助开发者通过互联网分享知识,从而让更多开发者从中受益。使命是帮助开发者用代码改变世界。" />
<link rel="shortcut icon" href="//common.cnblogs.com/favicon.ico" type="image/x-icon" />
<link rel="Stylesheet" type="text/css" href="/bundles/aggsite.css?v=IlEZk4Ic2eCzcO6r0s4bGm62FAo8VZI-US_0EqUe2Bk1" />
<link id="RSSLink" title="RSS" type="application/rss+xml" rel="alterna