对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 08 Python
python实现屏保计时器的示例代码
Aug 08 Python
使用tensorflow实现线性回归
Sep 08 Python
如何利用Boost.Python实现Python C/C++混合编程详解
Nov 08 Python
python使用response.read()接收json数据的实例
Dec 19 Python
详解Python locals()的陷阱
Mar 26 Python
Django之提交表单与前后端交互的方法
Jul 19 Python
python 进程间数据共享multiProcess.Manger实现解析
Sep 23 Python
Python实现栈和队列的简单操作方法示例
Nov 29 Python
python如何输出反斜杠
Jun 18 Python
python tkinter实现定时关机
Apr 21 Python
只用Python就可以制作的简单词云
Jun 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
仿AS3实现PHP 事件机制实现代码
2011/01/27 PHP
php 伪造本地文件包含漏洞的代码
2011/11/03 PHP
解析php中如何直接执行SHELL
2013/06/28 PHP
ThinkPHP开发框架函数详解:C方法
2015/08/14 PHP
非常实用的php验证码类
2016/05/15 PHP
CI框架扩展系统核心类的方法分析
2016/05/23 PHP
PHP attributes()函数讲解
2019/02/03 PHP
浅谈PHP5.6 与 PHP7.0 区别
2019/10/09 PHP
Js setInterval与setTimeout(定时执行与循环执行)的代码(可以传入参数)
2010/06/11 Javascript
详谈 Jquery Ajax异步处理Json数据.
2011/09/09 Javascript
jquery.Jwin.js 基于jquery的弹出层插件代码
2012/05/23 Javascript
打豆豆小游戏 用javascript编写的[打豆豆]小游戏
2013/01/08 Javascript
JS分页效果示例
2013/10/11 Javascript
javascript获取web应用根目录的方法
2014/02/12 Javascript
使用Function.apply()的参数数组化来提高 JavaScript程序性能的技巧
2015/12/23 Javascript
JQuery中attr属性和jQuery.data()学习笔记【必看】
2016/05/18 Javascript
AngularJS基础 ng-paste 指令简单示例
2016/08/02 Javascript
JavaScript、C# URL编码、解码总结
2017/01/21 Javascript
Vue引用第三方datepicker插件无法监听datepicker输入框的值的解决
2018/01/27 Javascript
解决vuejs 使用value in list 循环遍历数组出现警告的问题
2018/09/26 Javascript
js 实现 list转换成tree的方法示例(数组到树)
2019/08/18 Javascript
Vue学习笔记之计算属性与侦听器用法
2019/12/07 Javascript
vue:el-input输入时限制输入的类型操作
2020/08/05 Javascript
python多线程用法实例详解
2015/01/15 Python
python使用pandas实现数据分割实例代码
2018/01/25 Python
python组合无重复三位数的实例
2018/11/13 Python
Python中os模块功能与用法详解
2020/02/26 Python
解决python DataFrame 打印结果不换行问题
2020/04/09 Python
香港No.1得奖零食网:香港零食大王
2016/07/22 全球购物
自我鉴定范文300字
2013/10/01 职场文书
中医专业应届生求职信
2013/11/17 职场文书
注塑工厂厂长岗位职责
2013/12/02 职场文书
股份合作协议书范本
2014/04/14 职场文书
交通事故委托书范本(2篇)
2014/09/21 职场文书
深入浅析Redis 集群伸缩原理
2021/05/15 Redis
Android基础入门之dataBinding的简单使用教程
2022/06/21 Java/Android