Python下使用requests库遇到的问题及解决方案

news2024/10/6 10:31:28

每一盏灯都有一个故事……当凌晨2点我的房间灯还亮着时,那就是我与BUG的一场生死博弈。一个人静静地坐在电脑前不断地写代码,感觉快要麻木了,好比闭关修炼一样枯燥无味。最终当我打通任督二脉后,bug修复迎来的一片曙光。

在这里插入图片描述

一、问题背景

在最近的项目中,我使用Python 3.6和DigestAuth进行身份验证时遇到了一个令人困扰的问题。我发现,在使用requests库时,由于Python 3的一个已知问题(https://bugs.python.org/issue28967),无法将requests对象进行pickle序列化。这个问题的根本原因在于Python 3.6中的_thread._local对象无法被正确pickle化。尽管这个问题在Python 3.5.4中已经得到了修复,但在Python 3.6中仍然存在。这个问题可能会影响到需要pickle功能的应用程序,因为无法保存和恢复请求会话对象。

二、解决方案

为了解决这个问题,我们需要禁用requests库中的_thread._local对象。以下是解决方案的步骤:

1、导入必要的库和模块:

import requests
from requests.auth import HTTPDigestAuth

2、创建一个新的HTTPDigestAuth类,我们称之为NoLocalAuth,该类继承自HTTPDigestAuth类,并覆盖了__getattribute__方法:

class NoLocalAuth(HTTPDigestAuth):
    def __init__(self, username, password):
        super().__init__(username, password)

    def __getattribute__(self, name):
        if name.startswith('_'):
            raise AttributeError(name)
        return object.__getattribute__(self, name)

在NoLocalAuth类的__getattribute__方法中,我们检查属性名称是否以下划线开头,如果是,就会引发AttributeError异常,从而阻止了对_thread._local对象的访问。

3、使用新的NoLocalAuth类创建一个requests.Session对象,并进行pickle序列化:

session = requests.Session(auth=NoLocalAuth('user', 'passwd'))
pickle.dumps(session)

通过上述代码,我们创建了一个使用NoLocalAuth类的requests.Session对象,成功地将其pickle化,而不会受到_thread._local对象的干扰。

这个解决方案有效地解决了在Python 3.6下使用DigestAuth时无法pickle化requests对象的问题。通过禁用_thread._local对象,我们确保了我们的应用程序能够正常运行,并且这种方法也具有一定的通用性,可用于解决类似的问题。

希望这篇文章对解决Python 3.6下的pickle问题有所帮助,让您的项目顺利进行!如果您有任何疑问或需要进一步的帮助,请随时提问。

完美解决Python下的pickle问题,那么使用requests库爬取数据就一帆风顺了,不过这里需要注意的是。除了有requests库支持外,对于网站的防封策略也应该注重,尤其是地址封禁限制访问的问题也需要得到解决,如用第三方的爬虫ip实时切换地址防止网站跳验证码。如果有更多的代码问题可以一起交流。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1233424.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

广东网络广播电视台《明星小主播》栏目开拍 小主持神采奕奕

近日,由广东网络广播电视台的《明星小主播》栏目,在广东广播电视台(人民北路)广州越秀区人民北路686号主楼五楼火热开拍,幕后花絮曝光。《明星小主播》栏目是一档专业少儿主持类节目,节目旨在培养小朋友的主…

模方4.1.0新版本正式上线啦!

新增单体化自动建模,直角搭桥、复制三角形两种方式补洞等功能,还有更多功能优化,让你的三维模型更好看! 欢迎前往官网下载试用→武汉大势智慧-实景三维-云端建模-新型基础设施

适合学校或高校老师、学生学习用的网盘推荐

现代教育中,数字化的教学资源和家长的参与度越来越重要。然而文件传输的问题一直是学校和家长面临的一个挑战,网络限制、U盘病毒和文件管理不便等问题,都对教学质量和家校沟通造成了影响。Zoho WorkDrive企业网盘为学校还有教辅机构提供了一个…

MAX/MSP SDK学习03:Atoms and Messages的使用

今天终于把Message消息选择器看得有点头绪了,主要是这个官方英文文档理解起来有点抽象。 编写IsMatchABC自定义Object,要求: ①若左入口(入口0)收到 "int" 型消息,则从出口发送数值 "888&q…

做外贸要学会分析客户情况

最近在某产品的专业群里询问一款产品,看谁可以做,然后很快就有一个自称是工厂的人加上了我。因为自己本身并不懂这个产品,很多他们发的问题自己都答不上来。我就如实告诉他自己是个新手,可以把你们现在能做的,或者已经…

数据结构之栈的讲解

💕" 春宵一刻值千金,花有清香月有阴。 "💕 作者:Mylvzi 文章主要内容:leetcode刷题之哈希表的应用(1) 1.栈的概念 栈是一种只允许在一端(栈顶)进行数据操作的数据结构,具…

一篇文章让你彻底了解Java算法「十大经典排序算法」

✍️作者简介:码农小北(专注于Android、Web、TCP/IP等技术方向) 🐳博客主页: 开源中国、稀土掘金、51cto博客、博客园、知乎、简书、慕课网、CSDN 🔔如果文章对您有一定的帮助请👉关注✨、点赞&…

Delayed 延时任务

延时任务与定时任务的区别 延时任务,可以理解为定时任务的一种,但是他们是有区别的。 延时任务:将程序代码延时执行,执行完毕,即为结束。 定时任务:周期性执行任务。代码执行完毕后,并不意味着…

2023年中国AI基础设施行业发展趋势分析:AI基础设施将保持高速增长[图]

从产品形态来看,AI基础设施可划分为AI基础硬件和基础软件两大类。而在AI生态系统中,通用型和定制型AI基础设施的相互依赖性促进了广泛的AI技术应用,也为各行业的持续发展提供了关键支持。 AI基础设施分类 资料来源:共研产业咨询&…

windows11系统如何设置锁屏壁纸

1. 在开始页面里面找到设置 2. 在设置里面找到个性化 3. 按照红色圈出部分操作 个性化锁屏界面 选择 图片 浏览照片 选择一张你觉得好看的图片作为锁屏壁纸 注:如果需要在锁屏后的登录页面显示壁纸 请勾选第三个红圈部分

Java基本数据类型与引用类型的区别

基本数据类型存放在栈中,引用数据类型其具体内容存放在堆中栈中存放的是其具体内容所在内存的地址。通过变量地址可以找到变量的具体内容,就像通过房间号可以找到房间一样。 public class Main{public static void main(String[] args){//基本数据类型in…

Active Directory 和域名系统(DNS)的相互关系

什么是域名系统(DNS) 域名系统(DNS),从一般意义上讲是一种将主机名或域名解析为相应IP地址的手段。 在 AD 的中,DNS 服务维护 DNS 域和子域的工作命名空间,这些域和子域主要有助于查找过程&am…

最新绿豆APP源码苹果CMS影视插件版本/原生JAVA源码+反编译开源+免授权

源码简介: 最新绿豆APP源码苹果CMS影视插件版本,它是原生JAVA源码反编译开源免授权,绿豆影视对接苹果CMS,它可以支持多功能自定义DIY页面布局。 1、新版绿豆视频APP视频6.1插件版反编译指南及教程 2、后端插件开源,可…

archery修改为不能自提自审核上线SQL

目录 背景修改代码效果参考 背景 我和同事都可以提交上线SQL,但是不能自己提交的SQL自己去审核通过。目前的情况是可以自提自审。 修改代码 找到/opt/archery/sql/utils/workflow_audit.py文件 ...省略...# 判断用户当前是否是可审核staticmethoddef can_revie…

windows如何查看自己的ip地址

windows如何查看自己的ip地址 1.打开控制面板 2.进入网络和internet 3.进入网络共享中心 4.点击以太网进入网络详情页,或邮件已连接的网络,点击属性 5.查看ipv4地址就是当前机器ip

prometheus基本介绍 prometheus和zabbix的区别 grafana可视化工具

一、 promethues概念prometheus介绍promethues的特点prometheus的工作原理prometheus的架构 二、promethues和zabbix的区别三、prometheus安装部署prometheus下载安装prometheus启动浏览器访问查看暴露指标将Prometheus配置为systemd管理 配置node_exporter监控项node_promethe…

深入探讨软件测试技术:方法、工具与最佳实践

💂 个人网站:【 海拥】【神级代码资源网站】【办公神器】🤟 基于Web端打造的:👉轻量化工具创作平台💅 想寻找共同学习交流的小伙伴,请点击【全栈技术交流群】 引言 软件测试是软件开发生命周期中至关重要的…

微信小程序会议OA-登录获取手机号流程登录-小程序导入微信小程序SDK(从微信小程序和会议OA登录获取手机号到登录小程序导入微信小程序SDK)

目录 获取用户昵称头像和昵称 wx.getUserProfile bindgetuserinfo 登录过程 登录-小程序 wx.checkSession wx.login wx.request 后台 准备数据表 反向生成工具生成 准备封装前端传过来的数据 小程序服器配置 导入微信小程序SDK application.yml WxProperties …

对OpenAI CEO奥特曼突然被解雇事件的一些分析

今天也来凑个热闹,说说OpenAI的事。本来不想写的,但是看到自媒体又开始胡说八道,所以根据我自己得到的消息和理解说一说我的看法,这篇文章要是有个小姐姐解说录成视频,那肯定火了,但是我现在没资源&#xf…

OpenAI政变背后是科学家创始人的悲歌

OpenAI政变背后是科学家创始人的悲歌 去年11月突然推出ChatGPT震惊世界的OpenAI,在整整一年后以闪电解职CEO再次震惊世界。 有不少人以为这拿的是乔布斯的剧本,错了,这其实是天才科学家奋力一击的故事。 OpenAI的灵魂人物不是CEO Sam Al…