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,特殊字符等等的输入: 但是我们测试验证后端服务器是否处理,这个时候去修改提交请求表单,绕过前端的限制进行测试: 二.使 ...
随机推荐
- PowerShell批量创建文件夹
效果如下: 实现关键: mkdir (1..10|%{"hwllo$_"}) 过程概述:
- FMDB初步使用小结
频繁的网络请求会给用户不好的体验,在最近开发的一个项目中有一个获取个人详细信息的界面,由于是子页面,进入页面后需要重新加载数据并刷新页面,而,每一次请求服务器再返回数据不仅用户体验不好,也花费手机流量 ...
- 【洛谷P1039】侦探推理
侦探推理 题目链接 这是一道恶心至极的模拟题 我们可以枚举罪犯是谁,今天是星期几,从而判断每个人说的话是真是假 若每个人说的话的真假一致,且说谎话的人数<=k且说真话的人数<=m-k,就是 ...
- LeetCode4.寻找两个有序数组的中位数 JavaScript
给定两个大小为 m 和 n 的有序数组 nums1 和 nums2. 请你找出这两个有序数组的中位数,并且要求算法的时间复杂度为 O(log(m + n)). 你可以假设 nums1 和 nums2 ...
- 用JS实现一个时钟的效果
(效果图) 分两步进行的. 第一步: 要得到现在的 时 分 秒 但是这里面有一个小玄机 . 比如现在是 9点整 时针指向 9 是没错的 但是如果现在是 9点半 时针应该指向的是 9到1 ...
- ETO的公开赛T5《猎杀蓝色空间号》题解
这道题别看题面这么长,其实题意很简单 就是让你求从起点开始的最长合法区间 合法的要求有两个:兜圈子和直飞 且这两个条件相互独立 (也就是说兜圈子的末尾不会对下面可能出现的直飞造成影响) 举个例子: 1 ...
- 关于 laravel 集合的使用
常用的有 count() count方法返回集合中所有项的数目: $collection = collect([1, 2, 3, 4]); $collection->count(); forPa ...
- 【原创】如何治疗使用python中re模块group、groups与findall分组匹配后产生的“眩晕反应”
转载请注明出处:https://www.cnblogs.com/oceanicstar/p/9244783.html 直接先上例子 >>> re.search('(book+ ...
- CentOS 手动配置本地yum源(参考CentOS7 制作 CentOS6本地yum源)
将原有/etc/yum.repos.d/目录下的文件名全部改为(*.bak),如(红色标记) [root@localhost ~]# cd /etc/yum.repos.d/ [root@localh ...
- PHP将二位数组按照第二维的某个元素的值进行排序
例如: //原始数组是这样的,希望能够按照第二维中的run_date升序或者降序进行排序: $arr=array( 0=>array( 'run_date'=>'2017-11-21', ...