对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动态网页批量爬取
Feb 14 Python
python 文件操作删除某行的实例
Sep 04 Python
Python中支持向量机SVM的使用方法详解
Dec 26 Python
Django使用paginator插件实现翻页功能的实例
Oct 24 Python
Django2.1集成xadmin管理后台所遇到的错误集锦(填坑)
Dec 20 Python
python把转列表为集合的方法
Jun 28 Python
python 设置xlabel,ylabel 坐标轴字体大小,字体类型
Jul 23 Python
python文件处理fileinput使用方法详解
Jan 02 Python
Python qrcode 生成一个二维码的实例详解
Feb 12 Python
python使用scapy模块实现ping扫描的过程详解
Jan 21 Python
python 制作本地应用搜索工具
Feb 27 Python
关于 Python json中load和loads区别
Nov 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
全国FM电台频率大全 - 25 云南省
2020/03/11 无线电
PHP写UltraEdit插件脚本实现方法
2011/12/26 PHP
如何使用php判断所处服务器操作系统的类型
2013/06/20 PHP
php调用google接口生成二维码示例
2014/04/28 PHP
php使用str_shuffle()函数生成随机字符串的方法分析
2017/02/17 PHP
浅析PHP数据导出知识点
2018/02/17 PHP
thinkphp3.2框架中where条件查询用法总结
2019/08/13 PHP
CSS+jQuery实现的一个放大缩小动画效果
2013/09/24 Javascript
事件委托与阻止冒泡阻止其父元素事件触发
2014/09/02 Javascript
node.js中的fs.fstatSync方法使用说明
2014/12/15 Javascript
jquery带动画效果幻灯片特效代码
2015/08/27 Javascript
jQuery mobile的header和footer在点击屏幕的时候消失的解决办法
2016/07/01 Javascript
vue微信分享 vue实现当前页面分享其他页面
2017/12/02 Javascript
微信小程序项目实践之验证码倒计时功能
2018/07/18 Javascript
Vue下拉框回显并默认选中随机问题
2018/09/06 Javascript
Vue中的验证登录状态的实现方法
2019/03/09 Javascript
Node.js学习教程之Module模块
2019/09/03 Javascript
javascript实现拼图游戏
2021/01/29 Javascript
基于Python代码编辑器的选用(详解)
2017/09/13 Python
python导入csv文件出现SyntaxError问题分析
2017/12/15 Python
wxPython的安装图文教程(Windows)
2017/12/28 Python
Python字典及字典基本操作方法详解
2018/01/30 Python
分享Pycharm中一些不为人知的技巧
2018/04/03 Python
Python实现的计算器功能示例
2018/04/26 Python
python输出电脑上所有的串口名的方法
2019/07/02 Python
python定义类self用法实例解析
2020/01/22 Python
利用python绘制中国地图(含省界、河流等)
2020/09/21 Python
Python lxml库的简单介绍及基本使用讲解
2020/12/22 Python
什么是WEB控件?使用WEB控件有哪些优势?
2012/01/21 面试题
任命书格式
2014/06/05 职场文书
幼儿园元旦主持词
2015/07/06 职场文书
新员工入职感言范文!
2019/07/04 职场文书
「魔法少女伊莉雅」美游粘土人开订
2022/03/21 日漫
如何开启Apache,Nginx和IIS服务器的GZIP压缩功能
2022/04/29 Servers
Python+Pillow+Pytesseract实现验证码识别
2022/05/11 Python
win10双系统怎么删除一个系统?win10电脑有两个系统删除一个的操作方法
2022/07/15 数码科技