requests安装

  •   用pip安装requests模块
  •   pip install requests

一、Get的使用

格式:get(url, params=None, **kwargs)

Get常见查询参数

  • req.status_code:响应状态码
  • req.raw:原始响应体,使用r.raw.read()读取
  • req.content:字节方式的响应体,需要进行解码
  • req.text:字符串方式的响应体,会自动更具响应头部的字符编码进行解码
  • req.headers:以字典对象储存服务器响应头,但是这个字典比较特殊,字典键不区分大小写,若键不存在,则返回None
  • req.json():request中内置的json解码器
  • req.raise_for_status():请求失败(非200响应),抛出异常
  • req.url:获取请求的url
  • req.cookies:获取请求后的cookies
  • req.encoding:获取编码
import requests
url = 'https://www.baidu.com/s'
params = {
'Wd':'%E6%B5%8B%E8%AF%95',
'prefixsug':'ceshi',
}
header = {
'User-Agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.163 Safari/537.36',
}
cookie = { }
data = requests.get(url=url,headers=header,params=params,cookies=cookie)
print(data.content.decode('utf8'))

断言:

assert data.json()['status']==False

Post请求参数

格式:post(url,data,json,…)

Post常见查询参数

  • url:post请求地址
  • data:body为application/x-www-form-urlencoded格式数据时传参入口
  • json:body为json格式数据时传参入口
  • headers:post请求需要header参数时传参入口

import requests,json

url = 'https://www.lagou.com/jobs/positionAjax.json'
params = {
'needAddtionalResult':'false'
} header = {
'User-Agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.163 Safari/537.36',
'Content-Type':'application/x-www-form-urlencoded; charset=UTF-8'
} body = {
'first':'true',
'pn':'1',
'kd':'软件测试工程师',
}
# requests 操作 # timeout超时时间2秒 verify 安全证书True要有安全证书,根据浏览器要求 indent 内容做序列化
value = requests.post(url=url,headers=header,params=params,data = body,timeout=2.00,verify=True,indent=True)
print(value.json())
data = value.json()
filename = 'filename'
x = json.dump(data,open(filename,'w'),ensure_ascii=False,indent=True)
y = json.load(open(filename,'r'))
print(y)

二、JSON模块

1、json.dumps()

  • 用于将dict类型的数据转成str,因为如果直接将dict类型的数据写入json文件中会发生报错,因此在将数据写入时需要用到该函数

2、json.loads()

  • json.loads()用于将str类型的数据转成dict。
  • 与json.dumps()用法正好反过来。

3、json.dump()

  • json.dump()用于将dict类型的数据转成str,并写入到json文件中。下面两种方法都可以将数据写入json文件

4、json.load()

  • json.load()用于从json文件中读取数据

JSON数据处理

  • import json
  • json.dumps(req.json(),indent=True,ensure_ascii=False)
  • req.json():json格式数据转换
  • indent=True:json格式数据序列化
  • ensure_ascii=False:json格式数据中文处理

三、请求超时、安全证书和内容序列化

请求超时      Requests.get中的timeout参数

Verify属性设置为False,安全证书免验证。   req= requests.get(url, verify=False)

内容做序列化    indent=True

# requests 操作  # timeout超时时间2秒   verify 安全证书True要有安全证书,根据浏览器要求   indent 内容做序列化
value = requests.get(url=url,headers=header,params=params,data = body,timeout=2.00,verify=True,indent=True)

四、COOKIE的处理

  1. 请求间的cookie传递。
  2. 函数间的cookie传递。
  3. Unittest框架下的cookie传递。

声明cookie容器对象:

  • self.cookie = requests.cookies.RequestsCookieJar()

向容器中传递生成cookies:

  • self.cookie.update(r.cookies 

第一步

第二步

第三步

第四步

import requests,unittest,json

class Test_CDN(unittest.TestCase):
@classmethod
def setUpClass(self):
self.cookie = requests.cookies.RequestsCookieJar()
def test_01login(self,*args):
url = 'https://pagead2.googlesyndication.com/getconfig/sodar?sv=200&tid=gda&tv=r20200416&st=env'
header = {
"accept":"*/*",
"accept-encoding":"gzip,deflate,br",
"accept-language":"zh-CN,zh;q=0.9,en;q=0.8",
"cache-control":"no-cache",
"origin":"https://blog.csdn.net",
"pragma":"no-cache",
"referer":"https://blog.csdn.net/weixin_43665351",
"sec-fetch-dest":"empty",
"sec-fetch-mode":"cors",
"sec-fetch-site":"cross-site",
"user-agent":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.163 Safari/537.36",
"x-client-data":"CK+1yQEIhrbJAQiktskBCMS2yQEIqZ3KAQinoMoBCMuuygEI0K/KAQi8sMoBCJe1ygEI7bXKAQiOusoB"
} req = requests.get(url=url,headers=header)
print(json.dumps(req.json(),indent=True))
self.cookie.update(req.cookies)
return req.cookies def test_02input(self):
url = 'https://me.csdn.net/api/external/user/getUserProfile?username=weixin_43665351'
header = {
"accept":"application / json, text / javascript, * / *; q = 0.01",
"accept - encoding":"gzip,deflate,br",
"accept - language":"zh - CN, zh;q = 0.9, en;q = 0.8",
"cache - control":"no - cache",
"content - type":"application / json",
"origin":"https: // blog.csdn.net",
"pragma":"no - cache",
"referer":"https: // blog.csdn.net / weixin_43665351",
"sec - fetch - dest":"empty",
"sec - fetch - mode":"cors",
"sec - fetch - site":"same - site",
"user - agent":"Mozilla / 5.0(Macintosh;Intel Mac OS X 10_15_4) AppleWebKit / 537.36(KHTML, like Gecko) Chrome / 80.0.3987.163Safari / 537.36",
}
cookie = self.test_01login()
print(cookie)
req = requests.post(url=url,headers = header,cookies = cookie)
print(json.dumps(req.json(),indent=True)) if __name__ == '__main__':
unittest.main()

传cookie

五、Token的处理

1.从响应中提取token值。

2.token值的使用方式。

import requests
key = requests.Session()
file = key.get('http://www.baidu.com')
print(file.cookies)

Requests-html

安装

  pip3 install requests-html

导入

  from requests_html import HTMLSession

  Requests-html

使用

  from requests_html import HTMLSession

  req = HTMLSession()

  params = {'query':'testing'}

  w=r.get("http://www.sogou.com/web",params=params)

六、认证及SESSION的处理

身份认证的定义

  • 身份认证是使用用户提供的凭证来识别用户。
  • session会话保存,用来保持会话的状态;
  • token是对用户进行授权。
  • 身份认证和授权的关系:需要先获取身份信息才能进行授权

身份认证的类型

1、基本身份认证

HTTP Basic Auth是HTTP1.0提出的认证方式

客户端对于每一个realm,通过提供用户名和密码来进行认证的方式

当认证失败时,服务器收到客户端请求,返回401 UNAUTHORIZED,同时在HTTP响应头的WWW-Authenticate域说明认证方式及认证域身份认证的类型

import requests
from requests.auth import HTTPBasicAuth
url = '192.613.001.002'
# 通过auth输入用户名和用户密码,来通过系统的验证
r = requests.get(url=url,auth=HTTPBasicAuth('user','password'))
print(r.content)

2、netrc 认证

如果认证方法没有收到 auth 参数,Requests 将试图从用户的 netrc 文件中获取 URL 的 hostname 需要的认证身份

3、摘要式身份认证

digest authentication:在HTTP 1.1提出,目的是替代http 1.0提出的基本认证方式

SESSION的处理

1、requests库的session对象能够帮我们跨请求保持某些参数,也会在同一个session实例发出的所有请求之间保持cookies。

2、requests库的session对象还能为我们提供请求方法的缺省数据,通过设置session对象的属性来实现。

import requests
key = requests.Session()
file = key.get('http://www.baidu.com')
print(file.cookies)

Python接口测试request的更多相关文章

  1. Python接口测试实战1(上)- 接口测试理论

    如有任何学习问题,可以添加作者微信:lockingfree 课程目录 Python接口测试实战1(上)- 接口测试理论 Python接口测试实战1(下)- 接口测试工具的使用 Python接口测试实战 ...

  2. Python接口测试实战5(下) - RESTful、Web Service及Mock Server

    如有任何学习问题,可以添加作者微信:lockingfree 课程目录 Python接口测试实战1(上)- 接口测试理论 Python接口测试实战1(下)- 接口测试工具的使用 Python接口测试实战 ...

  3. Python接口测试实战2 - 使用Python发送请求

    如有任何学习问题,可以添加作者微信:lockingfree 课程目录 Python接口测试实战1(上)- 接口测试理论 Python接口测试实战1(下)- 接口测试工具的使用 Python接口测试实战 ...

  4. Python接口测试实战1(下)- 接口测试工具的使用

    如有任何学习问题,可以添加作者微信:lockingfree 课程目录 Python接口测试实战1(上)- 接口测试理论 Python接口测试实战1(下)- 接口测试工具的使用 Python接口测试实战 ...

  5. python接口测试(post,get)-传参(data和json之间的区别)

    python接口测试如何正确传参: POST 传data:data是python字典格式:传参data=json.dumps(data)是字符串类型传参 #!/usr/bin/env python3 ...

  6. Python接口测试实战4(下) - 框架完善:用例基类,用例标签,重新运行上次失败用例

    如有任何学习问题,可以添加作者微信:lockingfree 课程目录 Python接口测试实战1(上)- 接口测试理论 Python接口测试实战1(下)- 接口测试工具的使用 Python接口测试实战 ...

  7. Python接口测试实战5(上) - Git及Jenkins持续集成

    如有任何学习问题,可以添加作者微信:lockingfree 课程目录 Python接口测试实战1(上)- 接口测试理论 Python接口测试实战1(下)- 接口测试工具的使用 Python接口测试实战 ...

  8. Python接口测试实战4(上) - 接口测试框架实战

    如有任何学习问题,可以添加作者微信:lockingfree 课程目录 Python接口测试实战1(上)- 接口测试理论 Python接口测试实战1(下)- 接口测试工具的使用 Python接口测试实战 ...

  9. Python接口测试实战3(下)- unittest测试框架

    如有任何学习问题,可以添加作者微信:lockingfree 课程目录 Python接口测试实战1(上)- 接口测试理论 Python接口测试实战1(下)- 接口测试工具的使用 Python接口测试实战 ...

  10. Python接口测试实战3(上)- Python操作数据库

    如有任何学习问题,可以添加作者微信:lockingfree 课程目录 Python接口测试实战1(上)- 接口测试理论 Python接口测试实战1(下)- 接口测试工具的使用 Python接口测试实战 ...

随机推荐

  1. PCIe卡设计资料保存:536-基于ZU7EV的FMC 通用PCIe卡

    基于ZU7EV的FMC 通用PCIe卡   一.板卡简介 基于3U PXIe的ZU11EG/ZU7EG/ZU7EV的通用 ,实现FMC的数据接口和主控计算,广泛应用于工业控制,检测,视觉处理.支持工业 ...

  2. Cookie解码编码

    这两天给客户做竞价推广时发生一件奇怪的事情: 用户搜索关键词是AA匹配关键词是AB,等于关键词和要推广的单元完全匹配,那么用户点击创意进入网站时的Url应该就是A的: 但偶然发现关键词匹配了,url却 ...

  3. Mac 远程 屏幕共享 screen sharing

    ​ 屏幕共享可以用于在局域网中控制另一台 Mac,也能通过 iMessage 在广域网环境下创建彼此的连接,用来指导和解决问题非常方便. 通过 Apple ID 来创建连接 1,Command+空格键 ...

  4. list集合之流操作

    1.根据某一个实体字段进行去重(分组)操作 List<Object> list = objectList.stream().collect(Collectors.collectingAnd ...

  5. PHP压缩二进制流转CSV文件

    接口返回的数据是二进制流,需先BASE64解码,再进行解压缩,压缩的文件格式为ZIP,需使用Inflater进行解压,即可得到文件. java demo: 转成PHP代码: 贴上 原始二进制流数据,需 ...

  6. ts 学习笔记

    var message:string = "Hello World" console.log(message) // ts 1基础类型 任意类型 any 声明为 any 的变量可以 ...

  7. kunkun

    <html> <head> <title>cxk</title> </head> <body><h1>给设计师:字体 ...

  8. BLOG-2

    前言 这几次的PTA作业和考试涉及到的知识点有面向对象中对数据的封装,还有继承和多态,还有抽象类和对象容器 也涉及到了一些,同时还有关于正则表达式的一些内容.而关于题量,这应该对于一个初学者来说是一个 ...

  9. NSA对下一代新技术的评估“网络透视”2010

    时间线回到2010年,那时候做渗透测试流行找目标还是通过Google hack,Google dork去寻找目标比如inurl:asp?id= 寻找asp网站可利用的注入点,在厉害点一键爬取域名在配合 ...

  10. 《Makefile中变量的高级用法:变量的替换引用、变量的嵌套使用》

    高级使用方法有两种:第一种是变量的替换引用,第二种是变量的嵌套引用. 第一种用法经常用到,第二种用法我们很少使用.我们应该尽量避免使用变量的嵌套引用,在必须使用时,嵌套的层数越少越好.因为这种方法表达 ...