Python之Request库踩坑之路

Python Requests 库中的重试策略实践 网络请求由于各种原因可能会失败,例如网络波动、服务暂时不可达等。为了增强客户端的健壮性,实现请求的自动重试是一个常见的做法。在Python中,requests库是处理HTTP请求的标准工具之一。然而,requests本身并不直接提供重试机制,这需要借助urllib3库中的Retry类来实现。本文将介绍如何在requests中实现请求的自动重试。 阅读详情

Python之Request库踩坑之路

此文作者是刚入手Python,用来平时研究自动化测试,所以对Request理解有限,如有疑问可以联系讨论。

背景

Requests 继承了urllib2的所有特性。Requests支持HTTP连接保持和连接池,支持使用cookie保持会话,支持文件上传,支持自动确定响应内容的编码,支持国际化的 URL 和 POST 数据自动编码。

安装

利用pip安装:
$ pip install requests

使用

GET请求

1.基本的GET的请求

response = requests.get("http://www.baidu.com/")
#也可以这样写
response = requests.request("get","http://www.baidu.com/")

2.添加headers 和 params

如果想添加 headers,可以传入headers参数来增加请求头中的headers信息。如果要将参数放在url中传递,可以利用 params 参数。

key = {'key': 'CC'}
headers = {
    "User-Agent": "Mozilla/5.0"}
response = requests.get("http://www.baidu.com/s?", params=key, headers=headers)
print(response.text)# 查看响应内容,response.text 返回的是Unicode格式的数据
print(response.content)# 查看响应内容,response.content返回的字节流数据
print(response.status_code)# 查看响应码

如果你想取文本,可以通过response.text;如果想取图片/文件,则可以使用response.content。

POST方法

1.基本的POST的请求

response = requests.post("http://www.baidu.com/",data = data)

2.body带参数

formdata = {
    "type": "AUTO",
    "doctype": "json",
    "key": "www",
    "ue": "UTF-8",
}
url = "http://auto-installment/v1/loan-credit-check"
response = requests.post(url,data = data,headers=headers)

print(response.text)#显示返回结果
print(response.json())# 如果是json文件可以直接显示

注意:
打印的结果出现中文乱码,使用json.dupms(response, ensure_ascii=False))解决

Session

一般利用Session在跨请求的时候保持某些参数,比如实现登录后才能访问其他页面

# 1. 创建session对象,可以保存Cookie值
session = requests.session()

# 2. 需要登录的用户名和密码
data = {"username": "mxxxx", "password": "1233444"}

# 3. 发送附带用户名和密码的请求,并获取登录后的Cookie值,保存在ssion里
session.post("https://www.jianshu.com/sign_in", data=data)

# 4. ssion包含用户登录后的Cookie值,可以直接访问那些登录后才可以访问的页面
response = session.get("https://www.jianshu.com/writer#/")

踩坑记要

1.在使用requests去请求一个接口时,出现报错的情况,但是这个接口本身却没有问题。这是因为接口的请求参数有两种情况:简单类型(一般少于3个)和复杂对象类型。
解决方法:在headers中定义一下这两种参数的类型
简单类型:headers={"Content-Type": "application/x-www-form-urlencoded"}
复杂对象类型:headers={"Content-Type":application/json}
2.某些HTTPS请求存在 SSL证书验证
解决方法:response = requests.get("https://www.baidu.com/", verify=False)

如果大家对于学习Python有任何问题,学习方法,学习路线,如何学习有效率的问题,可以随时来咨询我,或者缺少系统学习资料的,我做这行年头比较久,自认为还是比较有经验的,可以帮助大家提出建设性建议,这是我的Python交流qun:785128166,有任何问题可以随时来咨询我。
 

扩展

1.requests请求失败后,增加重试机制(若失败,将会重试3次)

request_retry = requests.adapatrs.HTTPAdapaters(max_retries=3)
session.mount('https://',request_retry)  

2.使用grequests实现异步请求

urls = [
    'http://www.url1.com',
    'http://www.url2.com',
    'http://www.url3.com',
    'http://www.url4.com',
    'http://www.url5.com',
]
resp = (grequests.get(u) for u in urls)
grequests.map(resp)

3.自定义cookies

我们使用Session实例来保持请求之间的cookies,但是有些特殊情况,需要使用自定义的cookies

我们使用Session实例来保持请求之间的cookies,但是有些特殊情况,需要使用自定义的cookies
# 自定义cookies
cookie = {'guid':'5BF0FAB4-A7CF-463E-8C17-C1576fc7a9a8','uuid':'3ff5f4091f35a467'}

session.post('http://', cookies=cookie)

4.统计一个API请求花费的时间

session.get(url).elapsed.total_seconds() 

5.设置请求超时

session.get(url, timeout=15)

6.文件上传

Requests利用files作为参数模拟提交文件数据

file = {'file':open('test.bmp','rb')}   #rb表示用二进制格式打开指定目录下的文件,且用于只读
r =requests.post('http://',files=file)
print(r.text)
python request库的使用 初识requests requests库的宣言是 HTTP for Humans (给人用的 HTTP 库) 我们首先来验证一下。 在网络编程中,最最基本的任务包含: 发送请求 登录 获取数据 解析数据 反序列化打印内容 我们以 GitHub 为例,先看一下使用urllib2要怎么做。为了把事情弄简单点,我们假设实现已经知道,GET 请求https://api.gi... 阅读详情

相关推荐

掌握Python Request库:网络请求与数据交互

Python编程语言之所以在数据科学和网络开发领域广受欢迎,原因之一就是其丰富的第三方库支持。Request库是这些库中的一个杰出代表,其设计目的是简化HTTP请求的发送,它使得开发者可以轻松地在Python中进行Web API的调用和网络数据的获取。Request库通过直观的API为HTTP操作提供了简洁、人性化的接口,不仅支持HTTP的基本功能,还提供了对SSL证书验证、HTTP连接保持、分块传输编码等功能的支持。

weixin_33506815的博客 1255

接口自动化测试requests模块详解

一、requests背景 Requests 继承了urllib2的所有特性。Requests支持HTTP连接保持和连接池,支持使用cookie保持会话,支持文件上传,支持自动确定响应内容的编码,支持国际化的 URL 和 POST 数据自动编码。 二、requests安装 利用pip安装: $ pip install requests 三、requests使用 GET请求 1.基本的GET的请求 response = requests.get("http://www.baidu.com/")

测试逍遥子的博客 1077

避坑指南:STM32移植CanFestival时那些没人告诉你的细节(含TJA1050硬件适配)

本文深入解析STM32移植CanFestival协议栈时的关键细节与TJA1050硬件适配技巧,涵盖AVR残留代码清理、定时器中断优化及CAN通信稳定性提升方案。特别针对TJA1050在特定波特率下的信号畸变问题提供实战解决方案,帮助开发者规避移植过程中的隐形陷阱,实现工业级稳定通信。

work3的博客 760

Python第三方requests库Session对象详解(2/6)

requests.Session提供一种持久性的会话,允许在多个请求之间保持cookie、header和连接池等配置参数的共享,这样可以重用同一连接,而不是为每个请求创建一个新的连接。

m0_73608980的博客 6821

STM32F103C8T6 驱动2位共阳数码管(基于 74HC595 和 PNP 三极管)

整体设计思路是通过 STM32F103C8T6 控制 74HC595 和 PNP 三极管,实现共阳数码管的显示功能。最初的电路设计中,三极管发射极接 5V 电源,这导致了数码管两位显示相同数字的问题。数码管能够稳定显示 0-99的数字。

qq_40289410的博客 2209

达梦数据库与sharding-jdbc的深度适配实践

本文详细介绍了达梦数据库与sharding-jdbc的深度适配实践,包括驱动与依赖管理、核心适配实现、注册与配置等关键步骤。通过扩展shardingSphere的方式,成功实现了达梦数据库的分库分表功能,并提供了常见问题解决方案和性能优化建议,助力企业级应用高效处理海量数据。

weixin_30300225的博客 623

python使用HTTP模版

session.close()在这个示例中,我们使用 requests 库建立了一个 HTTP 隧道,以便在抓取数据时通过代理进行访问。我们通过 session.mount() 方法将 HTTP 和 HTTPS 协议的适配器挂载到会话中,并设置了连接池的大小。接下来,我们设置了要抓取的 URL,并使用 session.get() 方法发送 HTTP GET 请求。如果请求成功,我们可以通过 response.text 获取响应内容,并进行相应的处理。# 抓取成功,对响应内容进行处理。

weixin_73725158的博客 1836

AUTOSAR Dem模块实战配置:从理论到代码生成的完整指南

本文提供了一份AUTOSAR Dem模块从理论到代码生成的完整实战配置指南。文章详细拆解了配置流程,涵盖Dem模块的核心角色、通用骨架搭建、事件与DTC映射、消抖机制配置,以及与BswM、EcuM、DCM等模块的联调方法,旨在帮助汽车电子工程师快速掌握诊断事件管理的关键配置步骤,生成可运行的代码。

3c4x5z6v7b的博客 455

session功能实现原理

        HTTP协议(http://www.w3.org/Protocols/)是“一次性单向”协议。         服务端不能主动连接客户端,只能被动等待并答复客户端请求。客户端连接服务端,发出一个HTTP Request,服务端处理请求,并且返回一个HTTP Response给客户端,本次HTTP Request-Response Cycle结束。         我们看到,HT

1255

【100%通过率】华为od机试C卷【贪吃的猴子】Java&Go 实现

一只贪吃的猴子,来到一个果园,发现许多串香蕉排成一行,每串香蕉上有若干根香蕉。每串香蕉的根数由数组numbers给出。猴子获取香蕉,每次都只能从行的开头或者未尾获取,并且只能获取N次,求猴子最多能获取多少根香蕉。第一次获取香蕉为行的开头,第二次获取为行的末尾,因此最终根数为4+3 =7。全部获取所有的香蕉,因此最终根数为1+2+3 = 6。第二行为数组numbers的值每个数字通过空格分开。1:简单题目,两个指针分别指向头尾,逐个对比即可。第一行为数组numbers的长度。第三行输入为N,表示获取的次数。

MISAYAONE的博客 1435

【SpringBoot 3.x 第92节】Spring Modulith:构建模块化单体架构(基于 Spring Boot 3),一文带你搞透(超详细)!

🏆本文收录于《滚雪球学SpringBoot 3.x》,专门攻坚指数提升,本年度国内最系统+最专业+最详细(永久更新)。    该专栏致力打造最硬核 SpringBoot3 从零基础到进阶系列学习内容,🚀均为全网独家首发,打造精品专栏,专栏持续更新中…欢迎大家订阅持续学习。 如果想快速定位学习,可以看这篇【SpringBoot3教程导航帖】,你想学习的都被收集在内,快速投入学习!!两不误。

**My Coding Family** 997

python Request库的get()方法

    1. Request库的get()方法: 最通常的方法是通过r=request.get(url)构造一个向服务器请求资源的url对象。 这个对象是Request库内部生成的。 这时候的r返回的是一个包含服务器资源的Response对象。包含从服务器返回的所有的相关资源。 url是什么? url是通过http协议存取资源的一个路径,它就像我们电脑里面的一个文件的路径一样。  ...

k_koris的博客 21万+

dolphinscheduler服务注册中心源码解析(一)服务注册与发现整体设计

下一篇文章我们开始讲解dolphinscheduler基于Zookeeper实现注册中心的源码解析。

最爱嫣夜来 375

Python中关于urllib库和request库详细教程

urllib库的核心功能是:向服务器发送请求,得到服务器响应,获取网页的内容。在某些网络情况不好或者服务器端异常的情况会出现请求慢的情况,或者请求异常,这时给timeout参数设置一个请求超时时间,而不是让程序一直在等待结果;钩子函数连接服务器成功以及每个数据块下载完成时各调用一次,包含3个参数,依次为已经下载的数据块,数据块的大小,总文件的大小,可用于显示下载进度。Ø requset:HTTP请求模块,可以用来模拟发送请求,只需要传入URL及额外参数,就可以模拟浏览器访问网页的过程。

code_xu的博客 5925

基于Simulink的超级电容器充放电仿真

为了更好地理解和设计超级电容器的应用系统,通常需要进行详细的仿真分析。Simulink 提供了一个强大的仿真环境,可以用来设计、分析和验证超级电容器充放电系统的控制策略。本教程将详细介绍如何使用 Simulink 进行超级电容器充放电的仿真实例。如果你希望对超级电容器的充放电过程进行精确控制,可以添加一个简单的逻辑控制器来控制开关的状态。通过本教程,我们详细介绍了如何使用 Simulink 进行超级电容器充放电的仿真实例。2. 添加超级电容器模型。7. 添加控制器(可选)1. 调整超级电容器参数。

xiaoheshang_123的博客 518

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

Python(request库)

requests是用python语言编写的简单易用的http库,用来做接口测试的库。

zzhz925的博客 2957

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

Python里的request库安装

安装request库 python里的request库经常被用于进行网络爬虫,想要学习网络爬虫的同学必须得安装request这个第三方库,接下来就是安装这个库的步骤 刚开始时,你是没有这个模块的 那么就得安装导入了 方法一: 1.确定自己以前没有安装过,那么就打开这个网址,进去下载(gz)https://pypi.org/project/pip/#files 等待下载好后,解压再放到你的python文件夹里的Lib里面 方法二: 利用pip安装,这种方法很简单,但是我这边莫名的会出错 WARNING: Y

weixin_45643931的博客 8905

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

21.7 Python 使用Request库

Request库可以用来发送各种`HTTP`请求,该框架的特点是简单易用,同时支持同步和异步请求,支持`HTTP`协议的各种方法和重定向。它还支持`Cookie`、`HTTPS`和认证等特性。 `Request`库的使用非常广泛,可以用于网络爬虫、API调用、网站测试等场景。

微软技术分享 8638

python-request库

​ python中的Web 请求库包括requests 、urllib、http.client。,被称为“让 HTTP 请求变得优雅的库”。相比标准库urllib和,它极大简化了发起请求、处理响应的复杂度,语法直观,功能强大。Requests是基于urllib,使用****库。其在python内置模块的基础上进行了高度封装,使得Requests能够轻松完成浏览器相关的任何操作。Requests能够模拟浏览器的请求,比起上一代的urllib库,Requests实现爬虫更加便捷迅速。

ly的博客 888

request库的7种方法

request库的7种方法 requests.request(method,url,**kwargs) method:请求的方式,可以选择get、head、post等方法 url:表示获取的链接地址 **kwargs:控制参数,13个 params:字典或者字节序列,作为参数添加到url中 import requests r1 = requests.request('G...

春风若是你的博客 2419

Python request库基本使用方法

request库的基本使用方法,不多bb,上代码,需要注意的地方都在注释里了 import requests from bs4 import BeautifulSoup def get_html_text(url): try: r=requests.get(url,timeout=50)#返回的r是Response类的对象,超过50s时抛出Timeout异常 ...

hrwy2920566283的博客 637

Python爬虫第4节-请求库urllib的request模块使用

开始学习爬虫时,第一步就是要模拟浏览器给服务器发送请求。这个时候,你可能会有很多问题:该从哪里开始做呢?需不需要自己来构造请求?要不要去关心请求数据结构是怎么实现的?需不需要了解HTTP、TCP、IP层的网络传输通信原理?要不要知道服务器是怎么响应和应答的?你可能会不知道该怎么做,但别担心。Python很厉害,它有功能齐全的类库,能帮我们完成这些请求。最基础的HTTP库有urllib、httplib2、requests、treg等。

攻城狮7号的博客 1732

python实战篇:利用request库打造自己的翻译接口

通过阅读之前python基础篇的文章,基本上对python这门语言有了初步的了解。基础篇的文章都是介绍python的一些语法和函数的使用方法。实战篇是通过一个完整的案例讲解python在实际开发中运用方法。今天通过做一个翻译的接口来介绍一下request库的基本用法。

qkh1234567的博客 1763

使用python的request库爬取某书网小说

1.导入库 import urllib.request import re 2.编写函数 #写一个叫xxx的函数 def down(): 3.获取小说的源码并编码以gbk方式显示 url='http://www.quanshuwang.com/book/9/9055' html=urllib.request.urlopen(url).read().decode('gbk') 如果不转成gbk显示是这样的 那又为什么一定是gbk呢 ?从它源码里面可以看见它的编码方式是什么 4.获取所有章节的链接 r

万物皆可学 3万+
上一篇: 面试题:为什么python性能差
下一篇: Python面向对象你都会?元类了解一下
测试小小小
博客等级 码龄6年 265粉丝 364原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值