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,特殊字符等等的输入: 但是我们测试验证后端服务器是否处理,这个时候去修改提交请求表单,绕过前端的限制进行测试: 二.使 ...
随机推荐
- 随机森林算法-Deep Dive
0-写在前面 随机森林,指的是利用多棵树对样本进行训练并预测的一种分类器.该分类器最早由Leo Breiman和Adele Cutler提出.简单来说,是一种bagging的思想,采用bootstra ...
- VS中添加预处理宏的方法
VS中添加预处理宏的方法 除了在.c及.h中添加宏定义之外,还可以采用如下方法添加宏定义: 1.若只需要定义一个宏(如#define DEBUG),可以右键点击工程-->属性-->c/c+ ...
- Android UI开发专题(转)
http://dev.10086.cn/cmdn/bbs/viewthread.php?tid=18736&page=1#pid89255 Android UI开发专题(一) 之界面设计 近期 ...
- C# ==、Equals、ReferenceEquals 区别与联系 (转载)
相关概念 .Net提供了ReferenceEquals.静态Equals,具体类型的Equals以及==操作符这四个判等函数.但是这四个函数之间有细微的关系,改变其中一个函数的实现会影响到其他函数的操 ...
- CONVERT函数----SQL
CONVERT函数是把时间转换成新类型的通用格式,这样方便查询 CONVERT(type,expression,style) type: 例如:varchar(10) 数据库字符串的类型,大小可以自 ...
- udt通信java再次升级1.1版
以前完成了udt的java代码测试,功能基本完成,近几天有时间重新梳理了下源码: 对原通信的关闭统一了方法,close定位过时,由shutdown与shutdownNow代替. 将一些主要方法添加了注 ...
- C++练习--创建Boat类和Car类(含友元)
/* 定义Boat与Car两个类,二者都有weight属性, 定义二者的一个友元函数totalWeight()为外部函数, 计算二者的重量和. */ #include<iostream> ...
- <寒假逆向学习第一天> 破解基础知识之介绍常见工具和壳的特征
对于我们新手来说,程序是什么语言编写的?程序到底有没有加壳?程序加了什么壳?一直在我们心中充满了疑惑,本文我将根据我的近期学习,总结一下常见的工具和壳的特征. 一:程序是什么语言编译的 从目前接触到程 ...
- LeetCode 相交链表
基本思路 先计算出两个链表的长度 O(n) 将长的一个链表的指示指针移动到和短链表相同长度 O(n) 两个链表指示指针同时向前移动,直到二者相同或者NULL 代码实现 /** * Definition ...
- PyCharm入门第一步-——创建并运行第一个Python项目
创建项目 点击Create New Project 创建项目 输入自己的项目名,点击Create创建 创建文件 右键项目名创建python文件 创建一个HelloPython文件 输入print(&q ...