对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中encode()方法的使用简介
May 18 Python
Python的Django框架中的表单处理示例
Jul 17 Python
Python 异常处理的实例详解
Sep 11 Python
python实现单向链表详解
Feb 08 Python
python批量设置多个Excel文件页眉页脚的脚本
Mar 14 Python
python numpy 部分排序 寻找最大的前几个数的方法
Jun 27 Python
如何将 awk 脚本移植到 Python
Dec 09 Python
在python中list作函数形参,防止被实参修改的实现方法
Jun 05 Python
使用Nibabel库对nii格式图像的读写操作
Jul 01 Python
教你使用Pandas直接核算Excel中快递费用
May 12 Python
教你漂亮打印Pandas DataFrames和Series
May 29 Python
python区块链实现简版工作量证明
May 25 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程序中的常见漏洞进行攻击(上)
2006/10/09 PHP
坏狼的PHP学习教程之第2天
2008/06/15 PHP
浅析PHP中Session可能会引起并发问题
2015/07/23 PHP
PHP实现清除wordpress里恶意代码
2015/10/21 PHP
PHP在线调试执行的实现方法(附demo源码)
2016/04/28 PHP
PHP简单获取上月、本月、近15天、近30天的方法示例
2017/07/03 PHP
js 代码优化点滴记录
2012/02/19 Javascript
JS去掉第一个字符和最后一个字符的实现代码
2014/02/20 Javascript
JQuery的Ajax中Post方法传递中文出现乱码的解决方法
2014/10/21 Javascript
详解js私有作用域中创建特权方法
2016/01/25 Javascript
EditPlus中的正则表达式 实战(4)
2016/12/15 Javascript
详解Angular2组件之间如何通信
2017/06/22 Javascript
Three.js中网格对象MESH的属性与方法详解
2017/09/27 Javascript
jQuery NProgress.js加载进度插件的简单使用方法
2018/01/31 jQuery
在vue里面设置全局变量或数据的方法
2018/03/09 Javascript
简化vuex的状态管理方案的方法
2018/06/02 Javascript
node.js自动上传ftp的脚本分享
2018/06/16 Javascript
Vue使用zTree插件封装树组件操作示例
2019/04/25 Javascript
JavaScript 实现同时选取多个时间段的方法
2019/10/17 Javascript
微信小程序自定义菜单切换栏tabbar组件代码实例
2019/12/30 Javascript
ssm+vue前后端分离框架整合实现(附源码)
2020/07/08 Javascript
基于vue hash模式微信分享#号的解决
2020/09/07 Javascript
原生JS实现pc端轮播图效果
2020/12/21 Javascript
[05:04]完美世界携手游戏风云打造 卡尔工作室地图界面篇
2013/04/23 DOTA
在Python中将函数作为另一个函数的参数传入并调用的方法
2019/01/22 Python
Ubuntu中配置TensorFlow使用环境的方法
2020/04/21 Python
keras 使用Lambda 快速新建层 添加多个参数操作
2020/06/10 Python
IE兼容css3圆角的实现代码
2011/07/21 HTML / CSS
继电保护工岗位职责
2014/01/05 职场文书
股东协议书
2014/04/14 职场文书
财务负责人任命书
2014/06/06 职场文书
2014年员工工作总结范文
2014/11/18 职场文书
2016庆祝教师节新闻稿
2015/11/25 职场文书
毕业季聚会祝酒词!
2019/07/04 职场文书
微软PC Health Check电脑健康状况检查应用下载(Win11配置检测工具)
2021/06/26 数码科技
详解MySQL中timestamp和datetime时区问题导致做DTS遇到的坑
2021/12/06 MySQL