对python中使用requests模块参数编码的不同处理方法


Posted in Python onMay 18, 2018

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编码正确处理

对python中使用requests模块参数编码的不同处理方法

二、参数原样输出,不需要编码处理

使用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.

最后效果如下图,参数原样输出:

对python中使用requests模块参数编码的不同处理方法

三、参数使用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

对python中使用requests模块参数编码的不同处理方法

在该种请求下:

1. 如果参数需要URL编码.当参数少的时候可以使用dict定义.如果参数太多,dict比较麻烦,可以针对参数使用urllib.parse.quote("中文")手动encode成URL编码.

2. 如果中文参数需要原样输出.将参数格式化完成后再编码即可.pstr2 = "name={0}".format("中文").encode("utf-8")

以上这篇对python中使用requests模块参数编码的不同处理方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python判断两个list是否是父子集关系的实例
May 04 Python
Python 16进制与中文相互转换的实现方法
Jul 09 Python
Python基于opencv调用摄像头获取个人图片的实现方法
Feb 21 Python
pyqt5 从本地选择图片 并显示在label上的实例
Jun 13 Python
PyQt5 QTable插入图片并动态更新的实例
Jun 18 Python
PyCharm2018 安装及破解方法实现步骤
Sep 09 Python
pandas中遍历dataframe的每一个元素的实现
Oct 23 Python
python主线程与子线程的结束顺序实例解析
Dec 17 Python
Win系统PyQt5安装和使用教程
Dec 25 Python
Python while循环使用else语句代码实例
Feb 07 Python
Python装饰器用法与知识点小结
Mar 09 Python
python数据库操作mysql:pymysql、sqlalchemy常见用法详解
Mar 30 Python
Python3.6连接Oracle数据库的方法详解
May 18 #Python
python爬虫之模拟登陆csdn的实例代码
May 18 #Python
解决phantomjs截图失败,phantom.exit位置的问题
May 17 #Python
python自动截取需要区域,进行图像识别的方法
May 17 #Python
Python使用Phantomjs截屏网页的方法
May 17 #Python
Python 实现网页自动截图的示例讲解
May 17 #Python
Python操作Sql Server 2008数据库的方法详解
May 17 #Python
You might like
php 冒泡排序 交换排序法
2011/05/10 PHP
php预定义变量使用帮助(带实例)
2013/10/30 PHP
PHP扩展模块Pecl、Pear以及Perl的区别
2014/04/09 PHP
php中字符集转换iconv函数使用总结
2014/10/11 PHP
PHP四舍五入、取整、round函数使用示例
2015/02/06 PHP
jQuery与ExtJS之选择实例分析
2010/08/19 Javascript
js中top、clientTop、scrollTop、offsetTop的区别 文字详细说明版
2011/01/08 Javascript
只需20行代码就可以写出CSS覆盖率测试脚本
2013/04/24 Javascript
原生javascript实现的分页插件pagenav
2014/08/28 Javascript
js判断鼠标位置是否在某个div中的方法
2016/02/26 Javascript
js css实现垂直方向自适应的三角提示菜单
2016/06/26 Javascript
AngularJS使用拦截器实现的loading功能完整实例
2017/05/17 Javascript
vue生命周期的探索
2019/04/03 Javascript
vue多个元素的样式选择器问题
2019/11/29 Javascript
原生javascript制作的拼图游戏实现方法详解
2020/02/23 Javascript
JavaScript中的this基本问题实例小结
2020/03/09 Javascript
小程序实现左滑删除的效果的实例代码
2020/10/19 Javascript
[07:01]DOTA2-DPC中国联赛正赛 Aster vs Magma 3月5日 赛后选手采访
2021/03/11 DOTA
Python3 正在毁灭 Python的原因分析
2014/11/28 Python
Python 模板引擎的注入问题分析
2017/01/01 Python
python发送邮件实例分享
2017/07/28 Python
基于Python __dict__与dir()的区别详解
2017/10/30 Python
Python使用线程来接收串口数据的示例
2019/07/02 Python
如何通过雪花算法用Python实现一个简单的发号器
2019/07/03 Python
pytorch中的自定义反向传播,求导实例
2020/01/06 Python
Python实现遗传算法(二进制编码)求函数最优值方式
2020/02/11 Python
英国专业美容产品在线:Mylee(从指甲到脱毛)
2020/07/06 全球购物
俄罗斯第一家多品牌在线奢侈品精品店:Aizel.ru
2020/09/06 全球购物
Ajax和javascript的区别
2013/07/20 面试题
环保建议书200字
2014/05/14 职场文书
科学发展观活动总结
2014/08/28 职场文书
2014年小学数学教师工作总结
2014/12/03 职场文书
党务工作者主要事迹材料
2015/11/03 职场文书
CSS3实现的3D隧道效果
2021/04/27 HTML / CSS
MySQL 分组查询的优化方法
2021/05/12 MySQL
python实现手机推送 代码也就10行左右
2022/04/12 Python