首页 知识 正文
文章详情

目录:

1.requese

2.requesr

1.requese

requests一、简介使用 python 做自动化接口测试需要用代码发送 http 请求requests 是 Python 语言里网络请求库中最好用的,没有之一requests 库有完善详尽的中文版官方文档:。

2.requesr

https://requests.readthedocs.io/zh_CN/latest/作者Requests 的作者 Kenneth Reitz 是一个富有传奇色彩的人物Kenneth Reitz 在有着“云服务鼻祖”之称的 Heroku 公司,28 岁时就担任了 Python 语言的总架构师。

他做了什么呢?随便列几个项目名称: requests、python-guide、pipenv、legit、autoenv,当然它也给 Python 界很多知名的开源项目贡献了代码,比如 Flask大神级程序员,据说其身价高达 5 亿美元。

二、使用1. 发起请求1.1 请求方法每一个请求方法都有一个对应的 API,比如 GET 请求就可以使用 get() 方法:import requests resp = requests.get(https:

//www.baidu.com)而 POST 请求就可以使用 post() 方法,并且将需要提交的数据传递给 data 参数即可: resp = requests.post(http://httpbin.org/post

, data = {key:value}) 而其他的请求类型,都有各自对应的方法: requests.put(http://httpbin.org/put, data = {key:value}) requests.delete(

http://httpbin.org/delete) requests.head(http://httpbin.org/get) requests.options(http://httpbin.org/get)

非常的简单直观明了1.2 传递 URL 参数传递 URL 参数不需要去拼接 URL,而是简单的,构造一个字典,并在请求时将其传递给 params 参数: import requests params = {

key1: value1, key2: value2} resp = requests.get(“http://httpbin.org/get”, params=params) 此时,查看请求的 URL,则可以看到 URL 已经构造正确了:

print(resp.url) http://httpbin.org/get?key1=value1&key2=value2并且,有时候我们会遇到相同的 url 参数名,但有不同的值,而 python 的字典又不支持键的重名,那么我们可以把键的值用列表表示:

params = {key1: value1, key2: [value2, value3]} resp = requests.get(http://httpbin.org/get, params=params

) print(resp.url) http://httpbin.org/get?key1=value1&key2=value2&key2=value3注:http://httpbin.org 是 Kenneth Reitz 搭建的为测试 http 服务而写的项目

1.3 传递表单参数通常,你想要发送一些编码为表单形式的数据——非常像一个 HTML 表单要实现这个,只需简单地传递一个字典给 data 参数你的数据字典在发出请求时会自动编码为表单形式: resp = requests.post(。

http://httpbin.org/post, data = {key:value}) resp.json() {args: {},data: ,files: {},form: {key: value},

headers: {Accept: /,Accept-Encoding: gzip, deflate,Content-Length: 9,Content-Type: application/x-www-form-urlencoded,

Host: httpbin.org,User-Agent: python-requests/2.23.0,X-Amzn-Trace-Id: Root=1-5f620401-c24c466c4e6fac3ee0fda64d},

json: None,origin: 113.246.106.31,url: http://httpbin.org/post}1.4 传递 JSON 参数使用 json 参数直接传递,然后它就会被自动编码。

这是 2.4.2 版的新加功能: resp = requests.post(http://httpbin.org/post, json = {key:value}) resp.json() {args: {},

data: {“key”: “value”},files: {},form: {},headers: {Accept: /,Accept-Encoding: gzip, deflate,Content-Length: 16,

Content-Type: application/json,Host: httpbin.org,User-Agent: python-requests/2.23.0,X-Amzn-Trace-Id: Root=1-5f620443-9d8785d6ee6f444a67a162f8},

json: {key: value},origin: 113.246.106.31,url: http://httpbin.org/post}1.5 上传文件使用 files 参数传递文件句柄 url =

http://httpbin.org/post files = {file: open(test.xls, rb)} r = requests.post(url, files=files) r.text

1.6 自定义 Headers如果想自定义请求的 Headers,同样的将字典数据传递给 headers 参数 url = http://httpbin.org/get headers = {user-agent。

: lemonban/0.0.1} resp = requests.get(url, headers=headers) resp.json() {args: {},headers: {Accept: /

,Accept-Encoding: gzip, deflate,Host: httpbin.org,User-Agent: lemonban/0.0.1,X-Amzn-Trace-Id: Root=1-5f6205a1-25641a90501e5911352a84c0},

origin: 113.246.106.31,url: http://httpbin.org/get}1.7 自定义 CookiesRequests 中自定义 Cookies 也不用再去构造 CookieJar 对象,直接将字典递给 cookies 参数。

url = http://httpbin.org/get cookies = {cookies_are: working} resp = requests.get(url, cookies=cookies) resp.json()

{args: {},headers: {Accept: /,Accept-Encoding: gzip, deflate,Cookie: cookies_are=working,Host: httpbin.org,

User-Agent: python-requests/2.23.0,X-Amzn-Trace-Id: Root=1-5f6205d9-03efd00833b145237185ded0},origin: 113.246.106.31,

url: http://httpbin.org/get}1.8 设置代理当我们需要使用代理时,同样构造代理字典,传递给 proxies 参数 proxies = { http: http://10.10.1.10:3128,。

https: http://10.10.1.10:1080, } requests.get(http://example.org, proxies=proxies)1.9 重定向在网络请求中,我们常常会遇到状态码是 3 开头的重定向问题,在 Requests 中是默认开启允许重定向的,即遇到重定向时,会自动继续访问。

resp = requests.get(http://github.com, allow_redirects=False) resp.status_code 3011.10 禁止证书验证有时候我们使用了抓包工具,这个时候由于抓包工具提供的证书并不是由受信任的数字证书颁发机构颁发的,所以证书的验证会失败,所以我们就需要关闭证书验证。

在请求的时候把 verify 参数设置为 False 就可以关闭证书验证了import requests resp = requests.get(https://httpbin.org/get, verify=False)。

但是关闭验证后,会有一个比较烦人的 warning,可以使用以下方法关闭警告:fromrequests.packages.urllib3.exceptionsimportInsecureRequestWarning

# 禁用安全请求警告 requests.packages.urllib3.disable_warnings(InsecureRequestWarning) 1.11 设置超时设置访问超时,设置 timeout 参数即可。

requests.get(http://github.com, timeout=0.001) 可见,通过 Requests 发起请求,只需要构造好几个需要的字典,并将其传入请求的方法中,即可完成基本的网络请求。

2. 响应通过 Requests 发起请求获取到的,是一个 requests.models.Response 对象通过这个对象我们可以很方便的获取响应的内容2.1 响应数据通过 Response 对象的 text 属性可以获得字符串格式的响应内容。

import requests resp = requests.get(https://www.baidu.com) resp.text Requests 会自动的根据响应的报头来猜测网页的编码是什么,然后根据猜测的编码来解码网页内容,基本上大部分的网页都能够正确的被解码。

而如果发现 text 解码不正确的时候,就需要我们自己手动的去指定解码的编码格式import requests resp = requests.get(https://www.baidu.com) resp.encoding =

utf-8# 设置编码 resp.text 而如果你需要获得原始的二进制数据,那么使用 content 属性即可resp.content如果我们访问之后获得的数据是 JSON 格式的,那么我们可以使用 json() 方法,直接获取转换成字典格式的数据。

resp = requests.get(http://httpbin.org/get) resp.json() {args: {},headers: {Accept: /,Accept-Encoding: gzip, deflate,

Host: httpbin.org,User-Agent: python-requests/2.23.0,X-Amzn-Trace-Id: Root=1-5f62083f-6b0db04c94aff004d15c0068},

origin: 113.246.106.31,url: http://httpbin.org/get}2.2 状态码通过 status_code 属性获取响应的状态码 resp = requests.

get(http://httpbin.org/get) resp.status_code 2002.4 响应报头通过 headers 属性获取响应的报头resp.headers{Date: Wed, 16 Sep 2020 12:43:17 GMT, Content-Type: application/json, Content-Length: 307, Connection: keep-alive, Server: gunicorn/19.9.0, Access-Control-Allow-Origin: *, Access-Control-Allow-Credentials: true}

2.5 服务器返回的 cookies通过 cookies 属性获取服务器返回的 cookiesimport requests url = http://www.baidu.com resp = requests.

get(url) resp.cookies

2.6 url还可以使用 url 属性查看访问的 urlparams = {key1: value1, key2: value2} resp = requests.get(“http://httpbin.org/get”。

, params=params) resp.url http://httpbin.org/get?key1=value1&key2=value23. Session在 Requests 中,实现了 Session(会话) 功能,当我们使用 Session 时,能够像浏览器一样,在没有关闭关闭浏览器时,能够保持住访问的状态。

这个功能常常被我们用于登陆之后的数据获取,使我们不用再一次又一次的传递 cookiesimport requests session = requests.Session() session.get。

(http://httpbin.org/cookies/set/sessioncookie/123456789) resp = session.get(http://httpbin.org/cookies)

print(resp.text) {“cookies”: {“sessioncookie”: “123456789”}}首先我们需要去生成一个 Session 对象,然后用这个 Session 对象来发起访问,发起访问的方法与正常的请求是一摸一样的。

同时,需要注意的是,如果是我们在 get() 方法中传入 headers 和 cookies 等数据,那么这些数据只在当前这一次请求中有效如果你想要让一个 headers 在 Session 的整个生命周期内都有效的话,需要用以下的方式来进行设置:。

# 设置整个headers session.headers = { user-agent: lemonban/0.0.1 } # 增加一条headers session.headers.update({

x-test: true})

相关推荐
四月实战公开课丨高效公式让小白也能做出大神级项目作品
目录: 1.四月攻势 2.四月战报 1.四月攻势 全世界风靡的网课  如何进行1V1、1VN通讯?  如何用C4D做出dribbble大神作…
头像
知识 2024-06-06
Python学习教程公开课:好玩的Python
目录: 1.python入门公开课 2.python讲课视频 3.python课程入门 4.python的优质课 5.python 课程真的…
头像
知识 2024-06-06
MIT Python 公开课第三课要点-算法是怎样演进的
目录: 1.python算法课程 2.python算法教程这本书怎么样 3.python 算法导论 4.python算法基础 5.pytho…
头像
知识 2024-06-06
MIT Python 公开课第四课要点-函数也是一个对象
目录: 1.mit python 2.mit python 公开课 3.mit python凯撒密码 4.mit python作业答案 5.…
头像
知识 2024-06-06
清华教授用了12小时讲完的Python,整整311集,拿走不谢!
目录: 1.清华大学python视频 2.清华python用什么课本 3.python清华大学学生用书 4.清华大学出版社python 5.…
头像
知识 2024-06-06
自学c4d要多久才能出去工作 学习c4d建模渲染
目录: 1.自学c4d需要多久 2.学好c4d需要多久 3.c4d自学能学会么 4.自学c4d能找到工作吗 5.c4d学多久可以找工作 6.…
头像
知识 2024-06-06