对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 Django批量导入数据
Mar 25 Python
Python selenium文件上传方法汇总
Nov 19 Python
浅谈Django REST Framework限速
Dec 12 Python
Python数据结构与算法之使用队列解决小猫钓鱼问题
Dec 14 Python
详解Python3中的迭代器和生成器及其区别
Oct 09 Python
从列表或字典创建Pandas的DataFrame对象的方法
Jul 06 Python
python根据文本生成词云图代码实例
Nov 15 Python
Python爬虫库requests获取响应内容、响应状态码、响应头
Jan 25 Python
Keras实现DenseNet结构操作
Jul 06 Python
学python爬虫能做什么
Jul 29 Python
Python趣味挑战之用pygame实现简单的金币旋转效果
May 31 Python
python pygame 开发五子棋双人对弈
May 02 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学习笔记 IIS7下安装配置php环境
2012/10/29 PHP
php字符串截取的简单方法
2013/07/04 PHP
php 解决扫描二维码下载跳转问题
2017/01/13 PHP
JavaScript DOM学习第八章 表单错误提示
2010/02/19 Javascript
基于jQuery的实现简单的分页控件
2010/10/10 Javascript
jquery中eq和get的区别与使用方法
2011/04/14 Javascript
jQuery中需要注意的细节问题小结
2011/12/06 Javascript
jquery checkbox实现单选小例
2013/11/27 Javascript
如何在JavaScript中实现私有属性的写类方式(二)
2013/12/04 Javascript
JQEasy-ui在IE9以下版本中二次加载的问题分析及处理方法
2014/06/23 Javascript
javascript实现倒计时(精确到秒)
2015/06/26 Javascript
javascript动态添加checkbox复选框的方法
2015/12/23 Javascript
JS动态给对象添加事件的简单方法
2016/07/19 Javascript
AngularJs篇:使用AngularJs打造一个简易权限系统的实现代码
2016/12/26 Javascript
vue 过滤器filter实例详解
2018/03/14 Javascript
通过jquery的ajax请求本地的json文件方法
2018/08/08 jQuery
Vue.js图片预览插件使用详解
2018/08/27 Javascript
详解js中Array的方法及技巧
2018/09/12 Javascript
axios+Vue实现上传文件显示进度功能
2019/04/14 Javascript
如何检测JavaScript中的死循环示例详解
2020/08/30 Javascript
[46:10]2014 DOTA2国际邀请赛中国区预选赛 CnB VS HGT
2014/05/21 DOTA
[01:07:34]DOTA2-DPC中国联赛定级赛 RNG vs Aster BO3第二场 1月9日
2021/03/11 DOTA
python通过apply使用元祖和列表调用函数实例
2015/05/26 Python
详解Python中类的定义与使用
2017/04/11 Python
python设置随机种子实例讲解
2019/09/12 Python
pytorch制作自己的LMDB数据操作示例
2019/12/18 Python
Python猜数字算法题详解
2020/03/01 Python
python 发送邮件的四种方法汇总
2020/12/02 Python
解决pip安装tensorflow中出现的no module named tensorflow.python 问题方法
2021/02/20 Python
渡河少年教学反思
2014/02/12 职场文书
乡镇党的群众路线教育实践活动个人对照检查材料
2014/09/23 职场文书
卫生保健工作总结2015
2015/05/18 职场文书
导游词之介休绵山
2019/12/31 职场文书
Nginx解决前端访问资源跨域问题的方法详解
2021/03/31 Servers
MyBatis 动态SQL全面详解
2021/10/05 MySQL
Win11右下角图标点了没反应怎么办?Win11点击右下角图标无反应解决方法汇总
2022/07/07 数码科技