[ Python ]使用Charles对Python程序发出的Get与Post请求抓包-解决Python程序报错问题

news2024/11/24 10:36:49

目录

一、前言

二、Charles

三、抓取Python请求

3.1 正常运行

3.2 程序报错

3.2.1 报错信息

3.2.2 解决方法

3.3 取消警告信息

四、总结


一、前言

        在Python开发中,网络请求是常见的操作之一。无论是使用内置的urllib库还是第三方库requests,都可能遇到请求失败或数据返回不正确的问题。为了定位和解决这些问题,我们可以使用Charles这样的抓包工具来监控和分析Python程序发出的HTTP和HTTPS请求。

        但是常见的现象是,Charles与Python程序并不能一起运行,这会导致程序报错。

二、Charles

        Charles是一个跨平台的网络抓包工具,能够捕获HTTP和HTTPS请求及其响应,支持多种操作系统。其主要功能包括:捕获HTTP和HTTPS请求与响应;过滤请求,便于快速定位问题;拦截请求和响应,修改请求参数或响应内容;本地和远程映射,方便开发和测试。

        比如前些年比较火的🐏了个🐏,我就使用charles修改了服务器下发的关卡信息,实现通关的哈哈。

        Charles的使用教程:Charles WIN10配置教程

三、抓取Python请求

        那么,当我们开启Charles的代理时,此时再运行Python程序,常常是会报错的。

        比如这里我写了一个获取我写过的文章标题的程序:

import time
import requests

# TODO:先将下面参数改为自己的
user_id = 'qq_39724355'  # 被点赞的用户ID
user_Agent = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.0.0 Safari/537.36 Edg/123.0.0.0'

def Get_Articles():
    url = "https://blog.csdn.net/community/home-api/v1/get-business-list"  # 请求博客网址
    params = {
        "page": '1',
        "size": '200',
        "businessType": "blog",
        "username": user_id
    }
    headers = {
        'User-Agent': user_Agent,
        'Referer': 'https://blog.csdn.net/' + user_id + '?type=blog'
    }
    try:
        response = requests.get(url, params=params, headers=headers)  # 发送Get请求
        response.raise_for_status()  # 判断 code 200
        data = response.json()  # 获取Json文本
        global data_list  # 声明全局变量
        data_list = data.get('data', {}).get('list', [])  # 获取文章列表
        for item in data_list:  # 遍历文章列表
            time.sleep(0.1)  # 防止服务器断开主机连接 后续点赞和收藏要用
            print(f"标题:{item.get('title', '')}")  # 打印出文章标题和文章ID

    except requests.exceptions.HTTPError as e:
        print(f"ERROR={response.json()}")


if __name__ == '__main__':
    Get_Articles()

3.1 正常运行

        那么,该程序正常运行的效果如下:

3.2 程序报错

        但是当我打开Charles后,程序报错。

3.2.1 报错信息

        requests.exceptions.ProxyError: HTTPSConnectionPool(host='blog.csdn.net', port=443): Max retries exceeded with url: /community/home-api/v1/get-business-list?page=1&size=200&businessType=blog&username=qq_39724355 (Caused by ProxyError('Your proxy appears to only use HTTP and not HTTPS, try changing your proxy URL to be HTTP. See: https://urllib3.readthedocs.io/en/1.26.x/advanced-usage.html#https-proxy-error-http-proxy', SSLError(SSLError(1, '[SSL: UNKNOWN_PROTOCOL] unknown protocol (_ssl.c:852)'),)))

3.2.2 解决方法

        针对该错误,是因为其经过代理导致的,我们需要为Python程序设置代理,并且取消其身份验证。

        添加下述代码。

proxies = {
    "http": "127.0.0.1:8888",
    "https": "127.0.0.1:8888"
}

        其IP要取决于你电脑设置的代理地址。

        与此同时,还需要在请求时,配置使用代理和取消验证。

        原请求:

response = requests.get(url, params=params, headers=headers)  # 发送Get请求

        新请求:

response = requests.get(url, params=params, headers=headers, verify=False, proxies=proxies)  # 发送Get请求

3.3 取消警告信息

        此时,虽然能正常获取,但有警告信息。

        导入urllib3库,添加下列语句即可取消报警信息。

urllib3.disable_warnings()

四、总结

        至此,我们已经实现Charles抓取Python程序的Get或Post请求了。那么通过Charles,我们可以检查Python程序发出的请求的数据有什么问题,并对数据包进行修改重发,判断问题等。

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

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

相关文章

Java小白入门到实战应用教程-Scanner类及IO流讲解

Java小白入门到实战应用教程-Scanner类及IO流讲解 Scanner类 我们前面写的很多例子都是程序独自执行的,但是我们做编程写代码的目的是要实现能人和代码去交互的。 现在我们就来了解一个知识点,去实现最简单的人和程序的交互。 在java中通过Scanner类…

MySQL第3讲--数据类型和表的修改和删除

文章目录 前言数据类型数值类型整数类型浮点数和定点数 字符串类型字符类型:文本类型:二进制数据类型 日期和时间类型实例分析 表的操作添加字段修改字段删除字段修改表名删除表 DDL总结DDL数据库操作DDL表操作 前言 上一节在MySQL第2讲–关系型数据库以…

kubernetes 管理平台 Pod管理多容器 与嵌入式脚本

资源清单文件 模板与帮助信息 管理资源对象 多容器 Pod 管理多容器 Pod 自定义任务 容器保护策略 宽限期策略 Pod调度策略

CUDA编程从零到壹

如今,当我们谈论深度学习时,为了提高性能,我们通常会将其实现与使用 GPU 联系起来。 GPU(图形处理单元)最初设计用于加速图像、2D 和 3D 图形的渲染。然而,由于它们能够执行许多并行操作,它们的…

linux 源码部署polardb-x 错误汇总

前言 在linux 源码部署polardb-x 遇到不少错误,特在此做个汇总。 问题列表 CN 启动报错 Failed to init new TCP 详细错误如下 Caused by: Failed to init new TCP. XClientPool to my_polarx#267b21d8127.0.0.1:33660 now 0 TCP(0 aging), 0 sessions(0 runni…

【汇总】测开高频面试题

加油 !!! 🔥 谈谈对测试的理解 我认为测试是发现并及时解决问题:包括功能、性能、用户体验❤️等方面的验证 … 通过提前定位并修复缺陷,可以减少未来维护成本、保障软件质量、提升用户满意度❤️ … 我了…

大麦/猫眼抢票-狠货

大部分购买方式已迁移至手机端,专注研究移动端 小白操作–仅供学习 注意在帐号按权重的第三方账号设置解绑淘宝,否则有可能在抢票时候出现滑块,影响抢票,抢票优先选择大麦 ⚠️核心内容参考: 据悉,在购票环节&…

23_windows 使用sqlmap、kali使用sqlmap,SQL注入、sqlmap自动注入

sqlmap介绍 安装sqlmap 安装python环境 链接:https://pan.baidu.com/s/16QhhYCppSvuUikhKiOHNgg?pwd9LJY 提取码:9LJY C:\Users\leyilea> python // 测试python能不能用 >>> exit() // 退出 测试sqlmap是否可用 kali中运行sqlmap&#xff…

KAN网络简明教程

在不断发展的机器学习领域,最近一篇题为“KAN:柯尔莫哥洛夫-阿诺德网络”的研究论文在爱好者中引发了一波热潮。这种创新方法挑战了多层感知器 (MLP) 的传统观点,为神经网络架构提供了全新的视角。 NSDT工具推荐: Three.js AI纹理…

Qt 实战(9)窗体 | 9.2、QDialog

文章目录 一、QDialog1、基本概念2、常用特性2.1、模态与非模态2.2、数据交互 3、总结 前言: Qt框架中的QDialog类是一个功能强大且灵活的对话框控件,广泛应用于各种GUI(图形用户界面)应用程序中,用于处理用户输入、消…

map/multimap容器

一、 map基本概念 简介: map中所有元素都是pair pair中第一个元素为key(键值),起到索引惟用,第二个元素为value(实值) 所有元素都会根据元素的键值自动排序 本质: map/multimap属于关联式容器,底层结构是用二叉树实现 优点: 可以根据ke…

欧拉系统离线安装界面ukui

1、官网下载安装镜像iso后,默认没有gui openEuler | 开源社区 | openEuler社区官网openEuler是一个开源、免费的 Linux 发行版平台,将通过开放的社区形式与全球的开发者共同构建一个开放、多元和架构包容的软件生态体系。同时,openEuler 也是…

数据结构与算法|算法总结|动态规划篇之子序列、子数组问题

首先我们要明确以下两个问题: 子序列:子序列是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。例如,[3,6,2,7] 是数组 [0,3,1,6,2,2,7] 的子序列。 子数组:子数组是数…

HTTP协议基础知识【后端 4】

HTTP协议基础知识 HTTP(Hyper Text Transfer Protocol,超文本传输协议)是互联网上应用最为广泛的一种网络协议,它定义了客户端(如浏览器)与服务器之间数据传输的格式和规则。无论是浏览网页、在线购物还是使…

常见漏洞扫描工具!

AWVS 下载链接: 链接: https://pan.baidu.com/s/1rFq9iMV8oluumyylA22MFg?pwdmyc2 提取码: myc2 打开awvs安装⼯具,一路默认,不要修改文件安装路径,不然会失败; email和password是之后登录服务的账号密码&#xf…

算法日记day 34(动归之使用最小花费爬楼梯|不同路径2|整数拆分|不同的二叉搜索树)

一、使用最小花费爬楼梯 题目: 给你一个整数数组 cost ,其中 cost[i] 是从楼梯第 i 个台阶向上爬需要支付的费用。一旦你支付此费用,即可选择向上爬一个或者两个台阶。 你可以选择从下标为 0 或下标为 1 的台阶开始爬楼梯。 请你计算并返…

工业设备数据采集方案的设计实施与应用-天拓四方

随着工业4.0时代的来临,工业设备数据采集成为了提升生产效率、优化能源管理、实现智能化决策的关键环节。本文将围绕工业设备数据采集的重要性、方案设计实施以及TDE工业网关的应用实践展开探讨,以期为相关企业提供一种清晰、专业且实操性强的数据采集方…

Navicat Premium使用

文章目录 Navicat Premium 16的使用连接MySQL建立数据库并构建表导入数据 Navicat Premium 16是一款功能强大的数据库管理工具,它允许用户从单一应用程序中同时连接多种数据库,提供了极其便捷和高效的管理和开发环境,对于 MySQL 用户来说&…

leetcode198_打家劫舍

思路 动态规划 func rob(nums []int) int {if len(nums) < 2 {return nums[0]}// dp[i] 表示到第i家为止&#xff0c;小偷能够偷窃到的最高金额dp : make([]int, len(nums))dp[0] nums[0]dp[1] max(nums[0], nums[1])for i:2; i<len(nums); i {if nums[i] dp[i-2] &…

制造业BOM管理难点分析 三品PDM系统BOM管理解决方案详情

在当今竞争激烈的市场中&#xff0c;制造企业面临着产品多样化、个性化需求和快速交付的压力。BOM物料清单作为产品数据管理的核心&#xff0c;其准确性和效率直接影响到企业的竞争力。然而&#xff0c;BOM管理在制造企业中往往面临诸多挑战。但是PDM系统的出现让BOM管理变得不…