对python中使用requests模块参数编码的不同处理方法
作者:M1mory 发布时间:2022-11-02 01:30:29
python中使用requests模块http请求时,发现中文参数不会自动的URL编码,并且没有找到类似urllib (python3)模块中urllib.parse.quote("中文")手动URL编码的方法.研究了半天发现requests模块对中文参数有3种不同的处理方式.
一、requests模块自动URL编码参数
要使参数自动URL编码,需要将请求参数以字典的形式定义,如下demo:
import requests
proxy = {"http":"http://127.0.0.1:8080",
"https":"http://127.0.0.1:8080"}
def reTest():
url = "http://www.baidu.com"
pdict = {"name":"中文测试"}
requests.post(url = url,data = pdict,proxies = proxy)
效果如下图,中文被URL编码正确处理
二、参数原样输出,不需要编码处理
使用dictionary定义参数,发送请求时requests模块会自动URL编码处理参数.但有些时候可能不需要编码,要求参数原样输出,这个时候将参数直接定义成字符串即可.
import requests
proxy = {"http":"http://127.0.0.1:8080",
"https":"http://127.0.0.1:8080"}
def reTest():
url = "http://www.baidu.com"
pstr1 = "name=中文".encode("utf-8")
requests.post(url = url,data = pstr1, proxies = proxy)
注:参数需要utf-8编码,否则会报错Use body.encode('utf-8') if you want to send it encoded in UTF-8.
最后效果如下图,参数原样输出:
三、参数使用format或%格式化,导致参数str变成bytes
有些时候直接定义的字符串参数,其中有的参数是变量,需要format或%格式化控制变量.这个时候会发现格式化后的参数变成了bytes.
import requests
proxy = {"http":"http://127.0.0.1:8080",
"https":"http://127.0.0.1:8080"}
def reTest():
url = "http://www.baidu.com"
pstr2 = "name={0}".format("中文".encode("utf-8"))
requests.post(url = url,data = pstr2, proxies = proxy)
参数变成了bytes
在该种请求下:
1. 如果参数需要URL编码.当参数少的时候可以使用dict定义.如果参数太多,dict比较麻烦,可以针对参数使用urllib.parse.quote("中文")手动encode成URL编码.
2. 如果中文参数需要原样输出.将参数格式化完成后再编码即可.pstr2 = "name={0}".format("中文").encode("utf-8")
来源:https://blog.csdn.net/M1mory/article/details/58309378


猜你喜欢
- 最近的一些疫情信息很让人揪心,为了方便大家掌握疫情信息,在空闲之余做了一个关于 nCoV 的疫情监控小助手。主要的功能是通过企业微信的 We
- >>> a = 2.5 >>> b = 2.5 >>> c = b >>&
- 这篇文章主要介绍了python标识符命名规范原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友
- MyISAM和InnoDB对比MyISAMInnoDB主外键不支持支持事务不支持支持行表锁表锁,操作时即使操作一条记录也会锁住一整张表,不适
- 在开发中有些敏感接口,例如用户余额提现接口,需要考虑在并 * 况下接口是否会发生问题。如果用户将自己的多条提现请求同时发送到服务器,代码能否扛
- 前言count函数是用来统计表中或数组中记录的一个函数,count(*) 它返回检索行的数目, 不论其是否包含 NULL值。最近感觉大家都在
- order by 查询语句使用也是非常频繁,有时候数据量大了会发现排序查询很慢,本文就介绍一下 MySQL 是如何进行排序的,以及如何利用其
- strip()方法返回所有字符从开始及字符串的末尾(默认空格字符)被去除后的字符串的一个副本。语法以下是strip()方法的语法
- 垃圾分类是现代城市中越来越重要的问题,通过垃圾分类可以有效地减少环境污染和资源浪费。随着人工智能技术的发展,使用机器学习模型进行垃圾分类已经
- 在 go 的标准库中,提供了 sync.Cond 这个并发原语,让我们可以实现多个 goroutine 等待某一条件满足之后再继续执行。 它
- 最近在做cocos2d-x的简明配置,发现有的朋友的文本编辑器,自动将\r\n截断成\n,(在unix上换行使用\n,windows上,换行
- select nid,ntitle,nreadtimes,Row_number() over(order by nreadtimes des
- 需求针对tab键带来的多个空格问题,有时候我们针对带空格的一行数据要进行切割,如果有多个空格就会出现就会切割空格出现,我们想把空格都去掉,所
- 巨坑,切忌不要轻易删除Linux系统自带版本的Python1.卸载python(防止未卸载干净)rpm -qa|grep python|xa
- 现在的电脑差不多都是固态硬盘了,速度很快,但容量不会太大,经常会出现磁盘空间不足的情况,怎么办,删除那些不重要的最大的文件是最有效的办法。那
- php ffmpeg获取视频缩略图1.环境centos 7ffmpeg version 2.8.15 Copyright2.centos7安
- 阅读上一篇:你是真正的用户体验设计者吗? Ⅵ很可怕,是吧!图中翻译:(从内到外)第一层:用户体验第二层:内容管理界面设计顾客关系管理交互设计
- 前言在我们抓取网页内容的时候,通常是抓取一整个页面的内容,而我们仅仅只是需要该网页中的部分内容,那该如何去提取呢?本章就带你学习xpath插
- 要求,输入一串数字,并以列表的形式打印出来。number = input('请输入一串数字:') print(number)
- 原文地址:30 Days of Mootools 1.2 Tutorials - Day 12 - Drag and Drop using