对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之编写类之四再论继承
Oct 11 Python
Python中绑定与未绑定的类方法用法分析
Apr 29 Python
全面了解Python环境配置及项目建立
Jun 30 Python
对python遍历文件夹中的所有jpg文件的实例详解
Dec 08 Python
python+mysql实现学生信息查询系统
Feb 21 Python
Django实现简单网页弹出警告代码
Nov 15 Python
Python实现自定义读写分离代码实例
Nov 16 Python
Python pickle模块实现对象序列化
Nov 22 Python
pandas-resample按时间聚合实例
Dec 27 Python
深入浅析Python 命令行模块 Click
Mar 11 Python
Python 绘制可视化折线图
Jul 22 Python
Opencv+Python识别PCB板图片的步骤
Jan 07 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编程中尝试程序并发的几种方式总结
2016/03/21 PHP
php实现当前页面点击下载文件的简单方法
2016/09/22 PHP
VBScript版代码高亮
2006/06/26 Javascript
淘宝搜索框效果实现分析
2011/03/05 Javascript
js左右弹性滚动对联广告代码分享
2014/02/19 Javascript
JavaScript跨浏览器获取页面中相同class节点的方法
2015/03/03 Javascript
JS获取及设置TextArea或input文本框选择文本位置的方法
2015/03/24 Javascript
jQuery实现美观的多级动画效果菜单代码
2015/09/06 Javascript
第九章之路径分页标签与徽章组件
2016/04/25 Javascript
jQuery解决$符号命名冲突
2016/06/18 Javascript
基于javascript实现按圆形排列DIV元素(一)
2016/12/02 Javascript
Require.js的基本用法详解
2017/07/03 Javascript
利用types增强vscode中js代码提示功能详解
2017/07/07 Javascript
react-native ListView下拉刷新上拉加载实现代码
2017/08/03 Javascript
元素全屏的设置与监听实例
2017/11/28 Javascript
node错误处理与日志记录的实现
2018/12/24 Javascript
教你使用vue-cli快速构建的小说阅读器
2019/05/13 Javascript
详解Vue中的Props与Data细微差别
2020/03/02 Javascript
Python爬取Coursera课程资源的详细过程
2014/11/04 Python
python&MongoDB爬取图书馆借阅记录
2016/02/05 Python
PyQt5主窗口动态加载Widget实例代码
2018/02/07 Python
python中的变量如何开辟内存
2018/06/26 Python
python opencv实现旋转矩形框裁减功能
2018/07/25 Python
对python中的os.getpid()和os.fork()函数详解
2019/08/08 Python
python上传时包含boundary时的解决方法
2020/04/08 Python
Selenium常见异常解析及解决方案示范
2020/04/10 Python
如何使用Pytorch搭建模型
2020/10/26 Python
DC Shoes俄罗斯官网:美国滑板鞋和服饰品牌
2020/08/19 全球购物
自荐信格式简述
2014/01/25 职场文书
房产继承公证书
2014/04/09 职场文书
保卫钓鱼岛口号
2014/06/20 职场文书
2014年小学辅导员工作总结
2014/12/23 职场文书
小学班主任工作经验交流材料
2015/11/02 职场文书
《只有一个地球》教学反思
2016/02/16 职场文书
欧元符号 €
2022/02/17 杂记
Python Flask实现进度条
2022/05/11 Python