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,特殊字符等等的输入: 但是我们测试验证后端服务器是否处理,这个时候去修改提交请求表单,绕过前端的限制进行测试: 二.使 ...
随机推荐
- ASP.NET SignalR 与LayIM配合,轻松实现网站客服聊天室(三) 激动人心的时刻到啦,实现1v1聊天
看起来挺简单,细节还是很多的,好,接上一篇,我们已经成功连接singalR服务器了,那么剩下的内容呢,就是一步一步实现聊天功能. 我们先看看缺什么东西 点击好友弹框之后,要给服务器发消息,进入组Gro ...
- 【洛谷P1886】滑动窗口
滑动窗口 [题目描述] 有N个数字,以及一个大小为k的窗口.现在这个窗口从左边开始向右滑动,每次滑动一个单位,求出每次滑动后窗口中的最大值和最小值. 思路: k<=N<=1000000,暴 ...
- 获取订单的product_id 和订单的数量
php 获取订单的product_id 和相对id的数量 <?php foreach ($val->groupResults(2) as $key2=>$val2):?> &l ...
- python—递归函数
递归函数 定义:即在函数定义中自己调用自己 递归就是在过程或函数中自我调用 递归必须有递归出口,即递归结束条件 举个栗子-阶乘: def fact(n): if n == 1: return 1 re ...
- ffmpeg 学习
1.ffmpeg使用语法 命令格式: ffmpeg -i [输入文件名] [参数选项] -f [格式] [输出文件] ffmpeg [[options][`-i' input_file]] ...
- AngularJS 使用 uppercase 过滤器的表格
<!DOCTYPE html><html><head><meta http-equiv="Content-Type" content=&q ...
- java使用JSCH连接FTP(Linux服务器)上传文件到Linux服务器
首先需要用到jsch-0.1.54.jar 包: 链接: https://pan.baidu.com/s/1kZR6MqwpCYht9Pp_D6NKQw 密码: gywx 直接上代码: package ...
- Windows远程桌面连接命令mstsc
常用的:1. mstsc /v: 192.168.0.1 连接数满了之后使用的:2. mstsc /v: 192.168.0.1 /console -admin Mstsc 命令参考Updated: ...
- jsp页面的传值(popup)
jsp页面与xml文件对应的关系: 例:网页上jsp的url为----purchase_app_btn.do? 对应xml文件下的 <action path="/purchase_ap ...
- Java研究
Strap 箱线图 峰度 随机过程 马尔科夫 超几何分布 贝叶斯公式 随机变量 德摩根 功率谱 残差 吸收壁 平稳随机 chorst 深入JVM OSGI ...