python正则-字符串处理,主要用于处理请求参数格式为application/x-www-form-urlencoded的表单数据
#当提交的表单数据格式为application/x-www-form-urlencoded,直接从浏览器复制出来的格式是str_lin(chrome,也是最常见的)或者str_in2(火狐)这两种格式
你会发现直接复制出来用python进行请求时不行的,所以需要对其进行处理,最终的格式key1=value1&key2=value2...这种格式
#下面是实现代码,第三个方法是没事的时候花了点时间帮开发写的一个协助脚本,用于php调试请求 import re
#request_data_change_to_StrEncode
str_in='''customer_type: 1
source: 1
course_name_id: 3
tel: 18883612485
customer_name: 测试
sex: 0
school: ce'w's
intro_id: 0
keys[0]: 0
transfer_time: 2019-04-03 17:32:39''' #谷歌浏览器请求参数格式
str_in2='''card_manage_id 5
keys[0] 0
study_card_name 孵化营9800
price 9800.00
number 9
least_price 1.00
org_id 3
meth_id 2
year 3
month 0
ticket[0][ticket_manage_id] 1
ticket[0][ticket_num] 10
period 36
transfer_time 2019-04-03 17:32:39''' #火狐浏览器请求参数格式 str_in3='''customer_type:2
source:1
course_name_id:1
tel:13500000136
customer_name:测试-意向
sex:1
customer_card_afterfour:1234
sc_code_id:2
school:5555
address[0]:140000
address[1]:140100
sc_ty_id:2
student_number:2
team_number:2
turnover:2
intro_id:1
age_group:2S
customer_card:500241199601020215
is_fellow_study:2
fellow_hr:223
study_goal:2
qq:2455
wechat_number:wew
email:225@qq.com
school_area:222
intrdu_id:312
transfer_time:2019-04-03 17:32:39'''
str_in4='''member_finance_id[0]: 27803
total_price: 59800
state: 1
finan_rmk: 543
pay_fees_ascribed: 1'''
class request_data_change_to_str(object):
def requestDataToStr_firefoxAndChrome(self,str_in):
str_colon=re.search('[\W][\s]{1,1}|([\s]){1,1}|[\W]{1,1}',str_in).group() #匹配出字符串中所有的冒号
str_equal=re.sub(str_colon,'=',str_in) #将字符串中的冒号替换为等于号(: >>> =)
str_lin=re.search("(\s\n*){2,}|(\s\n*)",str_equal).group() #匹配出字符串中所有的换行符与空格,不写表示不限定匹配次数
str_give=re.sub(str_lin,'&',str_equal) #将字符串中的换行符替换为& (\n >>> &)
str_lin2=re.search('\s.*',str_give)
if str_lin2 is not None:
str_lin2=str_lin2.group()
str_lin3=re.search('=',str_lin2)
if str_lin3 is not None and 'time' in str_give: #对请求参数含有时间字段进行特殊处理
try:
str_lin3=str_lin3.group()
str_give2=re.sub(str_lin3,':',str_lin2)
str_give3=re.sub(str_lin2,str_give2,str_give)
print(str_give3)
return str_give3.encode() #返回字符串,并对数据进行编码处理
except Exception as error:
print(error)
# pass
else:
print(str_give)
return str_give.encode()
else:
print(str_give)
return str_give.encode() def requestDataToStr_firefoxAndChrome_teShu(self,str_in): #特殊处理
str_colon=re.search('[^\S?]{2,}',str_in).group() #匹配出字符串中所有的冒号
str_equal=re.sub(str_colon,'=',str_in) #将字符串中的冒号替换为等于号(: >>> =)
str_lin=re.search("(\s\n*){2,}|(\s\n*)",str_equal).group() #匹配出字符串中所有的换行符与空格,不写表示不限定匹配次数
str_give=re.sub(str_lin,'&',str_equal) #将字符串中的换行符替换为& (\n >>> &)
print('---'+str_colon+'---')
# print(str_equal)
str_lin2=re.search('\s.*',str_give)
# print(str_lin2)
if str_lin2 is not None:
str_lin2=str_lin2.group()
str_lin3=re.search('=',str_lin2)
print(str_lin3)
if str_lin3 is not None and 'time' in str_give: #对请求参数含有时间字段进行特殊处理
try:
str_lin3=str_lin3.group()
str_give2=re.sub(str_lin3,':',str_lin2)
str_give3=re.sub(str_lin2,str_give2,str_give)
print(str_give3)
return str_give3.encode() #返回字符串,并对数据进行编码处理
except Exception as error:
print(error)
# pass
else:
print(str_give)
return str_give.encode()
else:
print(str_give)
return str_give.encode() def requestDataToStr_firefoxAndChrome_teShu2(self,str_in): #特殊处理2
str_colon=re.search(':\W?|\s*:\W?',str_in).group() #匹配出字符串中所有的冒号
str_equal=re.sub(str_colon,'=',str_in) #将字符串中的冒号替换为等于号(: >>> =)
str_lin=re.search("(\s\n*){2,}|(\s\n*)",str_equal).group() #匹配出字符串中所有的换行符与空格,不写表示不限定匹配次数
str_give=re.sub(str_lin,'&',str_equal) #将字符串中的换行符替换为& (\n >>> &)
# print('---'+str_colon+'---')
# print(str_equal)
str_lin2=re.search('\s.*',str_give)
print(str_lin2)
if str_lin2 is not None:
str_lin2=str_lin2.group()
str_lin3=re.search('=',str_lin2)
print(str_lin3)
if str_lin3 is not None and 'time' in str_give: #对请求参数含有时间字段进行特殊处理
try:
str_lin3=str_lin3.group()
str_give2=re.sub(str_lin3,':',str_lin2)
str_give3=re.sub(str_lin2,str_give2,str_give)
print(str_give3)
return str_give3.encode() #返回字符串,并对数据进行编码处理
except Exception as error:
print(error)
# pass
else:
# print(str_give)
return str_give.encode()
else:
print(str_give)
return str_give.encode() def requestDataTotr_custom(self,str_in,str_custom='=>'):
str_colon=re.search('\s*:\W?',str_in).group() #匹配出字符串中所有的冒号
str_tihuan='"'+str_custom+'"'
str_equal=re.sub(str_colon,str_tihuan,str_in) #将字符串中的冒号替换为目标符号即定义的str_custom的值
str_lin=re.search("(\s\n*){2,}|(\s\n*)",str_equal).group() #匹配出字符串中所有的换行符与空格,不写表示不限定匹配次数
str_give=re.sub(str_lin,'"'+str_lin+'"',str_equal) #将字符串中的换行符替换为& (\n >>> &)
str_lin2=re.search('^',str_give).group() #匹配字符串开头
str_give2=re.sub('^','"'+str_lin2,str_give) #替换结果为'"'+匹配结果加
str_lin3=re.search('$',str_give2).group() #匹配字符串末尾
str_give3=re.sub('$',str_lin3+'"',str_give2)#替换结果为匹配结果加+'"'
# print('---'+str_colon+'---')
# print(str_equal)
# print(str_give2)
# print(str_give3)
return str_give.encode() #返回字符串,并对数据进行编码处理 def requestDataTostr_postman(self,str_in):
str_colon=re.search('\s*:\W*',str_in).group() #匹配出字符串中所有的冒号
str_tihuan=':'
str_equal=re.sub(str_colon,str_tihuan,str_in) #将字符串中的冒号替换为目标符号即定义的str_custom的值
str_lin=re.search("(\s\n*){2,}|(\s\n*)",str_equal).group() #匹配出字符串中所有的换行符与空格,不写表示不限定匹配次数
str_give=re.sub(str_lin,'\n',str_equal)
print(str_give) if __name__=="__main__":
request_data_to_str=request_data_change_to_str()
request_data_to_str.requestDataToStr_firefoxAndChrome(str_in3)
# request_data_to_str.requestDataToStr_firefoxAndChrome_teShu(str_in2)
# request_data_to_str.requestDataTotr_custom(str_in4)
# request_data_to_str.requestDataTostr_postman(str_in3)
输出: str_in 方法1 requestDataToStr_firefoxAndChrome >>>>> customer_type=>1&source=>1&course_name_id=>3&tel=>18883612485&customer_name=>测试&sex=>0&school=>ce'w's&intro_id=>2340 str_in方法2 requestDataToStr_firefoxAndChrome_teShu2 >>>
customer_type=>1&source=>1&course_name_id=>3&tel=>18883612485&customer_name=>测试&sex=>0&school=>ce'w's&intro_id=>2340 str_in方法3 requestDataTotr_custom >>>> "customer_type"=>""
"source"=>""
"course_name_id"=>""
"tel"=>""
"customer_name"=>"测试"
"sex"=>""
"school"=>"ce'w's"
"intro_id"=>""
#优化对时间的处理
python正则-字符串处理,主要用于处理请求参数格式为application/x-www-form-urlencoded的表单数据的更多相关文章
- HttpClient 以post的方式发送请求(由于请求参数太多所以改成以post提交表单的方式)
1:Util类方法 /** * 发送 Post请求 * * @param url * @param reqXml * @return */ public static String post(Stri ...
- python+pytest接口自动化(6)-请求参数格式的确定
我们在做接口测试之前,先需要根据接口文档或抓包接口数据,搞清楚被测接口的详细内容,其中就包含请求参数的编码格式,从而使用对应的参数格式发送请求.例如某个接口规定的请求主体的编码方式为 applicat ...
- http 请求参数之Query String Parameters、Form Data、Request Payload
Query String Parameters 当发起一次GET请求时,参数会以url string的形式进行传递.即?后的字符串则为其请求参数,并以&作为分隔符. 如下http请求报文头: ...
- go-web 获取get/post请求中的请求头和表单数据
package main import ( "fmt" "net/http" ) func handler(w http.ResponseWriter, r * ...
- form数据请求参数格式
请求后台参数格式问题 当请求后台传递参数时,有多中类型,而每一种都需要前后台进行配合,而这有时候会很简单,有时候却十分困难,记录一下,以备后期深究 数据 后台需要的数据 form表单 嵌套数据,第二层 ...
- axios的请求参数格式(get、post、put、delete)
1.get请求方式: axios.get(url[, config]) // [字符拼接型]axios.get(url?id=123&status=0') // 等同于 axios.get(u ...
- Servlet 响应 响应相关与重定向 请求 获取表单数据2种方法
一.HttpServletResponse (响应) 包括下面三个: 1.响应消息行 HTTP/1.1 200 OK 200是HTTP状态码, 代表请求已成功. (查httpservletres ...
- JavaWeb核心编程之(三.5)HTTP请求和接受表单数据
HTTP简介WEB浏览器与WEB拂去其之间的一问一答的交互过程, 必须遵循一定的规则,这个规则就是HTTP协议HTTP是hypertext transfer protocol(超文本传输协议)的简写, ...
- fiddler修改请求表单数据
一.使用出发点:进行测试某个添加编辑功能时候,部分字段前端限制了字段长度或者SQ,特殊字符等等的输入: 但是我们测试验证后端服务器是否处理,这个时候去修改提交请求表单,绕过前端的限制进行测试: 二.使 ...
随机推荐
- 2018.11.25 struts2与OGNL表达式的结合(高级)
两者的结合原理 底层源码分析 栈原理 先进后出 我们的valuestack其实是一个接口 在实现类中有这个参数 CompoundRoot的类继承的是ArrayList,具体实现弹栈和压栈的方法具体实现 ...
- maven的.m2文件夹
安装完maven是没有.m2文件夹的. Maven缺省的本地仓库路径为${user.home}/.m2/repository 在linux中以.开头的文件夹都是隐藏的.当使用maven命令的时候,ma ...
- NodeJS学习日记--环境配置及项目初始化
在node.js官网下载nodejs安装包 安装完成后打开控制台,输入 npm -version 如果正确显示npm版本则安装成功. 创建项目之前先要安装以下全局扩展模块 npm install -g ...
- 【luogu P3950 部落冲突】 题解
题目连接:https://www.luogu.org/problemnew/show/P3950 1.像我这种学数据结构学傻了的 2.边权化点权 所有点权初始化0 3.对于战争 将深度较深的-1,对于 ...
- 【题解】洛谷P1463 [POI2002][HAOI2007] 反素数(约数个数公式+搜索)
洛谷P1463:https://www.luogu.org/problemnew/show/P1463 思路 约数个数公式 ai为质因数分解的质数的指数 定理: 设m=2a1*3a2*...*pak ...
- some small knowledge
cookie 增查 <!--1.语义化标签的作用--> <!--1.1 从开发角度考虑是提高代码的可读性可维护性--> <!--1.2 网站的发布者:seo 搜索引擎优化 ...
- SQL3120W 不能将xx的字段值转换成 INTEGER值
一次用DB2 Load/Import导入数据时,报错,提示SQL3120W 不能将xx的字段值转换成 INTEGER值,但目标列不可为空.未装入该行. 目标表: CREATE TABLE TEST( ...
- nginx配置、域名、前端代码部署
服务器上部署nginx,部署多个独立的代码,用nginx做域名映射的配置方法: 修改/usr/local/nginx/conf/nginx.conf文件,重点是最后一行,include /data/n ...
- 手动创建简单webpack项目及React使用
一.创建基本的webpack4.x项目 1.运行 npm init -y 快速初始化项目 2.在项目根目录创建src的源代码目录和dist产品目录 3.在src目录下创建 index.html 4.使 ...
- OCCI开发环境搭建(Ubuntu)
OCCI开放包(下载与服务器版本相同的开发包, 这用的是12.1.0.2): instantclient-basic-linux.x64-12.1.0.2.0.zip instantclient-sd ...