对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的几种开发工具介绍
Mar 07 Python
C#返回当前系统所有可用驱动器符号的方法
Apr 18 Python
python+selenium+autoit实现文件上传功能
Aug 23 Python
Python3之文件读写操作的实例讲解
Jan 23 Python
简单实现Python爬取网络图片
Apr 01 Python
Python列表推导式与生成器用法分析
Aug 02 Python
python爬虫框架scrapy实现模拟登录操作示例
Aug 02 Python
python实现文件助手中查看微信撤回消息
Apr 29 Python
用pyqt5 给按钮设置图标和css样式的方法
Jun 24 Python
python的pygal模块绘制反正切函数图像方法
Jul 16 Python
DjangoWeb使用Datatable进行后端分页的实现
May 18 Python
Pandas实现DataFrame的简单运算、统计与排序
Mar 31 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
在IIS上安装PHP4.0正式版
2006/10/09 PHP
PHP Memcached + APC + 文件缓存封装实现代码
2010/03/11 PHP
PHP 类相关函数的使用详解
2013/05/10 PHP
获取用户Ip地址通用方法与常见安全隐患(HTTP_X_FORWARDED_FOR)
2013/06/01 PHP
Yii2隐藏frontend/web和backend/web的方法
2015/12/12 PHP
Laravel 5.5基于内置的Auth模块实现前后台登陆详解
2017/12/21 PHP
PHP页面静态化――纯静态与伪静态用法详解
2020/06/05 PHP
JSDoc 介绍使用规范JsDoc的使用介绍
2011/02/12 Javascript
extjs4 treepanel动态改变行高度示例
2013/12/17 Javascript
jQuery获取对象简单实现方法小结
2014/10/30 Javascript
被遗忘的javascript的slice() 方法
2015/04/20 Javascript
arguments对象验证函数的参数是否合法
2015/06/26 Javascript
轻量级javascript 框架Backbone使用指南
2015/07/24 Javascript
基于jquery实现智能表单验证操作
2016/05/09 Javascript
Ajax分页插件Pagination从前台jQuery到后端java总结
2016/07/22 Javascript
AngularJS 工作原理详解
2016/08/18 Javascript
AngularJS 实现JavaScript 动画效果详解
2016/09/08 Javascript
JS获得一个对象的所有属性和方法实例
2017/02/21 Javascript
vue计算属性时v-for处理数组时遇到的一个bug问题
2018/01/21 Javascript
Vue中$refs的用法详解
2018/06/24 Javascript
快速解决处理后台返回json数据格式的问题
2018/08/07 Javascript
详解Vue中Axios封装API接口的思路及方法
2020/10/10 Javascript
[04:32]玩具屠夫中文语音节选
2020/08/23 DOTA
跟老齐学Python之永远强大的函数
2014/09/14 Python
Python中关于字符串对象的一些基础知识
2015/04/08 Python
python 系统调用的实例详解
2017/07/11 Python
基于python select.select模块通信的实例讲解
2017/09/21 Python
Python时间和字符串转换操作实例分析
2019/03/16 Python
为什么黑客都用python(123个黑客必备的Python工具)
2020/01/31 Python
基于Python绘制个人足迹地图
2020/06/01 Python
分享PyCharm最新激活码(真永久激活方法)不用每月找安装参数或最新激活码了
2020/12/27 Python
Python3 + Appium + 安卓模拟器实现APP自动化测试并生成测试报告
2021/01/27 Python
详解html5 shiv.js和respond.min.js
2018/01/24 HTML / CSS
毕业生自我鉴定实例
2014/01/21 职场文书
打造高效课堂实施方案
2014/03/22 职场文书
美术课外活动总结
2014/07/08 职场文书