对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正则表达式判断字符串是否是全部小写示例
Dec 25 Python
python使用pil生成缩略图的方法
Mar 26 Python
对python csv模块配置分隔符和引用符详解
Dec 12 Python
Python实现的多进程拷贝文件并显示百分比功能示例
Apr 09 Python
Python中的四种交换数值的方法解析
Nov 18 Python
TensorFlow 显存使用机制详解
Feb 03 Python
Django 项目通过加载不同env文件来区分不同环境
Feb 17 Python
在Python 的线程中运行协程的方法
Feb 24 Python
利用django model save方法对未更改的字段依然进行了保存
Mar 28 Python
python 引用传递和值传递详解(实参,形参)
Jun 05 Python
python线程池 ThreadPoolExecutor 的用法示例
Oct 10 Python
Python几种酷炫的进度条的方式
Apr 11 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
ThinkPHP中使用ajax接收json数据的方法
2014/12/18 PHP
PHP callback函数使用方法和注意事项
2015/01/23 PHP
js怎么覆盖原有方法实现重写
2014/09/04 Javascript
鼠标事件的screenY,pageY,clientY,layerY,offsetY属性详解
2015/03/12 Javascript
jQuery.ajax 跨域请求webapi设置headers的解决方案
2016/08/08 Javascript
使用get方式提交表单在地址栏里面不显示提交信息
2017/02/21 Javascript
浅析JavaScript中的平稳退化(graceful degradation)
2017/07/24 Javascript
vue axios 在页面切换时中断请求方法 ajax
2018/03/05 Javascript
Vuex实现计数器以及列表展示效果
2018/03/10 Javascript
vue canvas绘制矩形并解决由clearRec带来的闪屏问题
2019/09/02 Javascript
node静态服务器实现静态读取文件或文件夹
2019/12/03 Javascript
简述Python中的面向对象编程的概念
2015/04/27 Python
python高手之路python处理excel文件(方法汇总)
2016/01/07 Python
Python多线程threading模块用法实例分析
2019/05/22 Python
python 进程的几种创建方式详解
2019/08/29 Python
python主线程与子线程的结束顺序实例解析
2019/12/17 Python
python3操作注册表的方法(Url protocol)
2020/02/05 Python
Python批量启动多线程代码实例
2020/02/18 Python
python实现人像动漫化的示例代码
2020/05/17 Python
详解python如何引用包package
2020/06/07 Python
解决Python 函数声明先后顺序出现的问题
2020/09/02 Python
css3 中的新特性加强记忆详解
2016/04/16 HTML / CSS
CSS3制作圆角图片和椭圆形图片
2016/07/08 HTML / CSS
HTML5本地存储localStorage、sessionStorage基本用法、遍历操作、异常处理等
2014/05/08 HTML / CSS
John Varvatos官方网站:设计师男士时装
2017/02/08 全球购物
Expedia印度尼西亚站:预订酒店、廉价航班和度假套餐
2018/01/31 全球购物
Nordgreen英国官网:斯堪的纳维亚设计师手表
2018/10/24 全球购物
应届毕业生求职信范文分享
2013/12/26 职场文书
农村婚礼主持词
2014/03/13 职场文书
家长寄语大全
2014/04/02 职场文书
毕业论文指导教师评语
2014/12/30 职场文书
八年级作文之感恩
2019/11/22 职场文书
python字符串常规操作大全
2021/05/02 Python
Vue过滤器(filter)实现及应用场景详解
2021/06/15 Vue.js
python中取整数的几种方法
2021/11/07 Python
MyBatis XPathParser解析器使用范例详解
2022/07/15 Java/Android