对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 实现归并排序算法
Jun 05 Python
py2exe 编译ico图标的代码
Mar 08 Python
Python中atexit模块的基本使用示例
Jul 08 Python
python UNIX_TIMESTAMP时间处理方法分析
Apr 18 Python
Python 中的with关键字使用详解
Sep 11 Python
Python元组操作实例分析【创建、赋值、更新、删除等】
Jul 24 Python
python 获取字符串MD5值方法
May 29 Python
Python生命游戏实现原理及过程解析(附源代码)
Aug 01 Python
pymysql模块的操作实例
Dec 17 Python
python中使用you-get库批量在线下载bilibili视频的教程
Mar 10 Python
Django实现任意文件上传(最简单的方法)
Jun 03 Python
Python pandas求方差和标准差的方法实例
Aug 04 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
通过5个php实例细致说明传值与传引用的区别
2012/08/08 PHP
使用PHP会话(Session)实现用户登陆功能
2013/06/29 PHP
PHP设置图片文件上传大小的具体实现方法
2013/10/11 PHP
深入讲解PHP的Yii框架中的属性(Property)
2016/03/18 PHP
AJAX PHP无刷新form表单提交的简单实现(推荐)
2016/09/09 PHP
CodeIgniter开发实现支付宝接口调用的方法示例
2016/11/14 PHP
thinkPHP实现基于ajax的评论回复功能
2018/06/22 PHP
PHP实现普通hash分布式算法简单示例
2018/08/06 PHP
php面试中关于面向对象的相关问题
2019/02/13 PHP
laravel 执行迁移回滚示例
2019/10/23 PHP
简略说明Javascript中的= =(等于)与= = =(全等于)区别
2013/04/16 Javascript
window.print打印指定div指定网页指定区域的方法
2014/08/04 Javascript
实现音乐播放器的代码(html5+css3+jquery)
2015/08/04 Javascript
jQuery选择器用法实例详解
2015/12/17 Javascript
jQuery Form 表单提交插件之formSerialize,fieldSerialize,fieldValue,resetForm,clearForm,clearFields的应用
2016/01/23 Javascript
js中scrollTop()方法和scroll()方法用法示例
2016/10/03 Javascript
Bootstrap基本插件学习笔记之模态对话框(16)
2016/12/08 Javascript
深入解析Vue 组件命名那些事
2017/07/18 Javascript
vue 将页面公用的头部组件化的方法
2017/12/18 Javascript
webpack4 升级迁移的实现
2018/09/12 Javascript
vue中轮训器的使用
2019/01/27 Javascript
[01:05:24]Ti4 冒泡赛第二天 iG vs NEWBEE 3
2014/07/15 DOTA
如何基于python3和Vue实现AES数据加密
2020/03/27 Python
django迁移文件migrations的实现
2020/03/31 Python
Keras实现将两个模型连接到一起
2020/05/23 Python
详解Windows下PyCharm安装Numpy包及无法安装问题解决方案
2020/06/18 Python
Python 实现国产SM3加密算法的示例代码
2020/09/21 Python
基于Python采集爬取微信公众号历史数据
2020/11/27 Python
请问软件开发中的设计模式你会使用哪些
2015/05/13 面试题
大学生四个方面的自我评价
2013/09/19 职场文书
大学英语演讲稿范文
2014/04/24 职场文书
电子信息工程专业求职信
2014/06/28 职场文书
做人民满意的公务员活动方案
2014/08/25 职场文书
庆祝教师节演讲稿
2014/09/03 职场文书
自我查摆剖析材料
2014/10/11 职场文书
元旦晚会开场白
2015/05/29 职场文书