对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操作Word批量生成文章的方法
Jul 28 Python
Python按行读取文件的实现方法【小文件和大文件读取】
Sep 19 Python
python if not in 多条件判断代码
Sep 21 Python
python利用Guetzli批量压缩图片
Mar 23 Python
pandas数值计算与排序方法
Apr 12 Python
GitHub 热门:Python 算法大全,Star 超过 2 万
Apr 29 Python
python psutil模块使用方法解析
Aug 01 Python
python 三元运算符使用解析
Sep 16 Python
python实现身份证实名认证的方法实例
Nov 08 Python
PyQt使用QPropertyAnimation开发简单动画
Apr 02 Python
如何解决安装python3.6.1失败
Jul 01 Python
基于python实现删除指定文件类型
Jul 21 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传参之传值与传址的区别
2015/04/24 PHP
基于PHP实现的事件机制实例分析
2015/06/18 PHP
Yii2中OAuth扩展及QQ互联登录实现方法
2016/05/16 PHP
Avengerls vs KG BO3 第三场2.18
2021/03/10 DOTA
javascript据option的value值快速设定初始的selected选项
2007/08/13 Javascript
checkbox 复选框不能为空
2009/07/11 Javascript
JS+CSS实现一个气泡提示框
2013/08/18 Javascript
js读取json的两种常用方法示例介绍
2014/10/19 Javascript
使用Chart.js图表库制作漂亮的响应式表单
2015/10/28 Javascript
基于JS实现类似支付宝支付密码输入框
2016/09/02 Javascript
微信小程序 input输入框控件详解及实例(多种示例)
2016/12/14 Javascript
微信小程序新增的拖动组件movable-view使用教程
2017/05/20 Javascript
详解微信小程序Radio选中样式切换
2017/07/06 Javascript
详解升级react-router 4 踩坑指南
2017/08/14 Javascript
快速解决vue在ios端下点击响应延时的问题
2018/08/27 Javascript
vue项目中使用Svg的方法
2018/10/24 Javascript
JS模拟实现京东快递单号查询
2020/11/30 Javascript
[18:32]DOTA2 HEROS教学视频教你分分钟做大人-谜团
2014/06/12 DOTA
在python中的socket模块使用代理实例
2014/05/29 Python
在Python的Django框架的视图中使用Session的方法
2015/07/23 Python
Python 备份程序代码实现
2017/03/06 Python
Python用于学习重要算法的模块pygorithm实例浅析
2018/08/16 Python
如何在django里上传csv文件并进行入库处理的方法
2019/01/02 Python
python tkinter canvas使用实例
2019/11/04 Python
利用python中集合的唯一性实现去重
2020/02/11 Python
django 模型字段设置默认值代码
2020/07/15 Python
canvas画布实现手写签名效果的示例代码
2019/04/23 HTML / CSS
美国网上订购鲜花:FTD
2016/09/23 全球购物
Hotels.com英国:全球领先的酒店住宿提供商
2019/01/24 全球购物
澳洲Chemist Direct药房中文网:澳洲大型线上直邮药房
2019/11/04 全球购物
大学生军训自我评价分享
2013/11/09 职场文书
情侣吵架检讨书
2014/02/05 职场文书
平面设计专业大学生职业规划书
2014/03/12 职场文书
个人借款担保书
2014/04/02 职场文书
群众路线教育实践活动的心得体会
2014/09/03 职场文书
见习报告格式要求
2014/11/04 职场文书