在python中,对encodeURIComponent的使用避坑指南

news2024/11/20 3:33:56
  • 随笔记录

    某站点对请求参数加密的时候对键值对都进行了encodeURIComponent。那encodeURIComponent的作用是什么呢?如何在python中进行使用呢?使用过程中如何结合实际情况解决问题呢?以下是避坑指南,会让你少走很多弯路。

  • 作用

    encodeURIComponent用于将字符串中的特殊字符进行编码,使其成为符合 URI 规范的安全字符,以便于在 URI 中进行传输和解析。例如在 URI 中,有一些特殊字符具有特殊的含义,例如 (:,/,?,#) 等,如果 URI 中包含这些特殊字符,并且它们不是作为字符的一部分出现(例如在查询参数中),就需要对它们进行编码,以免与 URI 的语义产生冲突。

  • js举例实战

  • python举例实战

    前面在js中举例了encodeURIComponent如何使用,那在python中如何使用呢?其时python的库中有一个urllib的parse的quote方法,可以将一些特殊字符进行编码

    如:

    from urllib.parse import quote
    
    char_list = [":","?","/","#"," ",'"']
    for char in char_list:
        print("原字符:",char,"编码后字符:",quote(char))
    

    大家可能有个疑问,为啥"/"没有被编码呢?

    这里就是我们今天说的重点,要是大家平时没注意的话,可能很久找不出原因,可能是对api不熟悉吧,哈哈。

    我们进入quote方法内部查看,他提供了四个参数如下:

    def quote(string, safe='/', encoding=None, errors=None):
        pass
    
    • string

      是需要被编码的字符串

    • safe

      参数的默认值为 ‘/’。该字符是保留的,但在典型用法中,quote 函数被调用在保留现有斜杠字符的路径上,这就解释了前面我们举例当中,为啥"/"没有被编码的原因了

    • encoding和errors

      可选的 encoding 和 errors 参数指定如何处理非 ASCII 字符,方法与 str.encode 方法接受的方式相同。
      默认情况下,encoding=‘utf-8’(字符使用 UTF-8 编码),errors=‘strict’(不支持的字符会引发 UnicodeEncodeError)

  • 网站参数编码实战

    某站的请求参数之一例如:

    dm_img_inter: {"ds":[{"t":2,"c":"Y2xlYXJmaXggZy1zZWFyY2ggc2VhcmNoLWNvbnRhaW5lcg","p":[1380,38,735],"s":[183,645,782]},{"t":2,"c":"d3JhcHBlcg","p":[825,59,1355],"s":[406,4385,3864]}],"wh":[3303,1736,55],"of":[293,586,293]}
    

    而URL上带的是:

    dm_img_inter=%7B%22ds%22:[%7B%22t%22:2,%22c%22:%22Y2xlYXJmaXggZy1zZWFyY2ggc2VhcmNoLWNvbnRhaW5lcg%22,%22p%22:[1380,38,735],%22s%22:[183,645,782]%7D,%7B%22t%22:2,%22c%22:%22d3JhcHBlcg%22,%22p%22:[825,59,1355],%22s%22:[406,4385,3864]%7D],%22wh%22:[3303,1736,55],%22of%22:[293,586,293]%7D
    

    我们直接使用quote对dm_img_inter的值进行编码,记得将字典序列化成字符串,使用json.dumps

    import json
    from urllib.parse import quote
    
    dm_img_inter = {"ds":[{"t":2,"c":"Y2xlYXJmaXggZy1zZWFyY2ggc2VhcmNoLWNvbnRhaW5lcg","p":[1380,38,735],"s":[183,645,782]},{"t":2,"c":"d3JhcHBlcg","p":[825,59,1355],"s":[406,4385,3864]}],"wh":[3303,1736,55],"of":[293,586,293]}
    dm_img_inter_str = json.dumps(dm_img_inter,separators=(",",""))
    print(quote(dm_img_inter_str))
    
    # 目标
    #%7B%22ds%22:[%7B%22t%22:2,%22c%22:%22Y2xlYXJmaXggZy1zZWFyY2ggc2VhcmNoLWNvbnRhaW5lcg%22,%22p%22:[1380,38,735],%22s%22:[183,645,782]%7D,%7B%22t%22:2,%22c%22:%22d3JhcHBlcg%22,%22p%22:[825,59,1355],%22s%22:[406,4385,3864]%7D],%22wh%22:[3303,1736,55],%22of%22:[293,586,293]%7D
    # 结果
    #%7B%22ds%22%3A%5B%7B%22t%22%3A2%2C%22c%22%3A%22Y2xlYXJmaXggZy1zZWFyY2ggc2VhcmNoLWNvbnRhaW5lcg%22%2C%22p%22%3A%5B1380%2C38%2C735%5D%2C%22s%22%3A%5B183%2C645%2C782%5D%7D%2C%7B%22t%22%3A2%2C%22c%22%3A%22d3JhcHBlcg%22%2C%22p%22%3A%5B825%2C59%2C1355%5D%2C%22s%22%3A%5B406%2C4385%2C3864%5D%7D%5D%2C%22wh%22%3A%5B3303%2C1736%2C55%5D%2C%22of%22%3A%5B293%2C586%2C293%5D%7D
    

    你这样编码以后去发请求,肯定是不对的,经过细心观察以后,我们发现【: , [ ]】这四个字符是不会被编码的

    我们刚刚利用前面说的一个知识点,safe参数,将这四个字符设置进去

    import json
    from urllib.parse import quote
    
    dm_img_inter = {"ds":[{"t":2,"c":"Y2xlYXJmaXggZy1zZWFyY2ggc2VhcmNoLWNvbnRhaW5lcg","p":[1380,38,735],"s":[183,645,782]},{"t":2,"c":"d3JhcHBlcg","p":[825,59,1355],"s":[406,4385,3864]}],"wh":[3303,1736,55],"of":[293,586,293]}
    dm_img_inter_str = json.dumps(dm_img_inter,separators=(",",""))
    print(quote(dm_img_inter_str, safe=':[],'))
    # 目标
    #%7B%22ds%22:[%7B%22t%22:2,%22c%22:%22Y2xlYXJmaXggZy1zZWFyY2ggc2VhcmNoLWNvbnRhaW5lcg%22,%22p%22:[1380,38,735],%22s%22:[183,645,782]%7D,%7B%22t%22:2,%22c%22:%22d3JhcHBlcg%22,%22p%22:[825,59,1355],%22s%22:[406,4385,3864]%7D],%22wh%22:[3303,1736,55],%22of%22:[293,586,293]%7D
    # 结果
    #%7B%22ds%22:[%7B%22t%22:2,%22c%22:%22Y2xlYXJmaXggZy1zZWFyY2ggc2VhcmNoLWNvbnRhaW5lcg%22,%22p%22:[1380,38,735],%22s%22:[183,645,782]%7D,%7B%22t%22:2,%22c%22:%22d3JhcHBlcg%22,%22p%22:[825,59,1355],%22s%22:[406,4385,3864]%7D],%22wh%22:[3303,1736,55],%22of%22:[293,586,293]%7D
    

    现在就完全一样了,简直perfect!

  • 总结

    需要多熟悉使用的api,并且需要和目标站点保持一直,方能成功!

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

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

相关文章

NVIDIA CUDA Toolkit

NVIDIA CUDA Toolkit CUDA Toolkit 12.4 Update 1 Downloads | NVIDIA Developer CUDA Toolkit是用于CUDA开发的软件包,主要包括CUDA编译器、运行时库、GPU驱动程序和开发工具等。它允许开发者使用通用编程语言(如C、C)来利用NVIDIA GPU进行…

mac终端出现bogon原因与解决办法

问题描述 不知道啥原因mac终端的用户名就变成了 xxxbogon ,可能是强制关闭终端导致的吧。 问题原因 终端在初始化时,需要确定主机的名字,此时终端会向 DNS 服务器反向查询本机 IP 地址,然后把得到的名字作为自己的主机名。如果…

使用 Rust 后,我​​使用 Python 的方式发生了变化

使用 Rust 后,我​​使用 Python 的方式发生了变化 Using type hints where possible, and sticking to the classic “make illegal state unrepresentable” principle. 尽可能使用类型提示,并坚持经典的“使非法状态不可表示”原则。 近年来&#xff…

LeetCode78:子集

题目描述 给你一个整数数组 nums &#xff0c;数组中的元素 互不相同 。返回该数组所有可能的 子集 &#xff08;幂集&#xff09;。 解集 不能 包含重复的子集。你可以按 任意顺序 返回解集。 代码 class Solution { public:vector<vector<int>> res;vector<…

xgp怎么取消续费 手把手介绍微软商店xgp关闭自动续费教程

Xbox是美国微软公司创建的电子游戏品牌&#xff0c;随2001年11月第一代Xbox游戏机发布而首次推出。其产品和服务包括家用游戏机、游戏制作与发行、线上游戏服务和内容订阅服务。Xbox已发售的家用游戏机有Xbox、Xbox360、Xbox One、Xbox One S、Xbox One X、Xbox Series X、Xbox…

亚服战网安装卡45%的解决方案

解决方案 先ping cn.patch.battlenet.com.cn这个域名&#xff0c;正常来说是一定会失败的&#xff0c;如果成功就不卡45%了然后ping tw.patch.battle.net 这个域名&#xff0c;这个域名应该是能成功的。 去该网址解析一下这个域名的ip&#xff0c;https://site.ip138.com/tw.p…

漏洞修复优先级考虑-不错的思路

权威说法&#xff1a; 漏洞利用预测评分系统 &#xff08;EPSS&#xff09; 是一项数据驱动的工作&#xff0c;用于估计软件漏洞在野外被利用的可能性&#xff08;概率&#xff09; https://www.first.org/epss/ GitHub - TURROKS/CVE_Prioritizer: Streamline vulnerability…

Kubernetes TDengine 系列|安装 TDengine 的 Grafana 插件|Grafana监控TDengine数据

为了让Grafana 能够监控到TDengine 数据&#xff0c;快速集成搭建数据监测报警系统&#xff0c;所以直接安装TDengine 插件。 目录 一、安装 TDengine 的 Grafana 插件1、下载TDengine grafana插件2、解压到指定目录3、配置未签名插件 二、配置数据源&#xff0c;简单查询TDen…

JDK的安装和配置

目录 1.Java 开发工具包在上方已关联资源下载使用2.JAVA_HOME3.CLASSPATH4.PATH5.安装jdk17情况需要将path变量中删除6.包内含有visualvm7.注意&#xff1a;如果安装JDK17在我们安装的时候可能会自动进行环境变量配置&#xff0c;我们需要在环境变量配置PATH中删除如下信息8.验…

汽车信息安全--如何理解TrustZone(1)

目录 1.车规MCU少见TrustZone 2. 什么是TrustZone 2.1 TrustZone隔离了什么&#xff1f; 2.2 处理器寄存器和异常处理 3.小结 1.车规MCU少见TrustZone 在车规MCU里&#xff0c;谈到信息安全大家想到的大多可能都是御三家的HSM方案&#xff1a;英飞凌的HSM\SHE、瑞萨的ICU…

循环神经网络介绍(RNN)

序列模型 定义&#xff1a;自然语言处理、音频、视频以及其他序列数据的模型 类型&#xff1a; 语音识别 情感分析 机器翻译 特点&#xff1a; 序列数据前后之间有很强的关联性 序列数据的输入输出长度不固定 循环神经网络 定义&#xff1a;循环&#xff08;递归&#xff…

revit\navisworks各种安装问题

You have entered a nonvalid serial number &#xff0c;怎么都不给你一个机会输出序列号&#xff0c;怎么办&#xff1f; step1: C:\Program Files (x86)\Common Files\Autodesk Shared\AdskLicensing目录下找到uninstall.exe&#xff0c;右键管理员模式运行&#xff0c;会…

7.MyBatis 操作数据库(初阶)

文章目录 1.什么是MyBatis2.为什么要学习 MyBatis&#xff1f;3.通过spring框架创建MyBatis项目3.1使用MyBatis查询数据库3.2 mysql连接不上报错解决方法 4.MyBatis的基础操作4.1企业建表规范&#xff1a;4.2MyBatis基本实现4.3单元测试4.4使用MyBatis可能遇到的问题4.5配置MyB…

初学python记录:力扣2385. 感染二叉树需要的总时间

题目&#xff1a; 给你一棵二叉树的根节点 root &#xff0c;二叉树中节点的值 互不相同 。另给你一个整数 start 。在第 0 分钟&#xff0c;感染 将会从值为 start 的节点开始爆发。 每分钟&#xff0c;如果节点满足以下全部条件&#xff0c;就会被感染&#xff1a; 节点此…

一款面向个人和企业的本地云存储解决方案——派盘

派盘是一款什么软件? 派盘是一款面向个人和企业的本地云存储解决方案,它利用了本地硬盘的存储容量,通过“云化”的方式,可以将本地硬盘变成云存储空间,拥有强大的数据保护功能,保证了数据的私密性和安全性。 派盘不仅可以帮助个人用户打造“数字第二大脑”,还可以帮助团…

03 - 伪目标

---- 整理自狄泰软件唐佐林老师课程 文章目录 1. 思考2. 伪目标的引入2.1 伪目标的语法&#xff1a;先声明&#xff0c;后使用2.2 伪目标的妙用&#xff1a;规则调用&#xff08;函数调用&#xff09;2.3 绕开 .PHONY 关键字定义伪目标 1. 思考 Makefile 中的 目标 究竟是什么&…

1.3K Star我上位机项目中用了这个开源项目

软件介绍 ClientServerProject的软件是一款基于C-S&#xff08;客户端-服务器&#xff09;架构的通用开发框架&#xff0c;为中小型系统的快速开发提供强大的支持。该框架由服务端、客户端以及公共组件三部分组成&#xff0c;不仅提供了基础的账户管理、版本控制、软件升级、公…

车企如何利用数据技术,指导汽车全生命周期的业务运营?

引言&#xff1a;数据正作为重点&#xff0c;为行业提供不可或缺的指导 《汽车数据发展研究报告&#xff08;2023&#xff09;》指出&#xff0c;汽车行业正由传统硬件制造向“电动化、智能化、网联化”方向转变。德勤预测&#xff0c;到 2025 年&#xff0c;汽车行业 20%的利…

vue集成百度地图vue-baidu-map

文章目录 vue集成百度地图vue-baidu-map1. Vue Baidu Map文档地址2. 设置npm数据源3. 安装vue-baidu-map4. 配置vue-baidu-map4.1 main.js全局注册4.2 vue页面设置4.3 效果 vue集成百度地图vue-baidu-map 1. Vue Baidu Map文档地址 https://dafrok.github.io/vue-baidu-map/#…

WCH RISC CH32V303RCT6 单片机的SDI Printf 虚拟串口功能 类似RTT打印功能 简单分析

参考&#xff1a; 有关于 SDI printf 更多的信息和资料吗&#xff1f; 关于 CH32 系列 MCU SDI 虚拟串口功能的使用 【CH32X035 评估板测评】 教你使用 SDI 接口重定向 printf 0.前言 有段时间没有看CH32V单片机的开发了&#xff0c;今天帮新来的同事调试时候看到debug.c里面有…