#当提交的表单数据格式为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的表单数据的更多相关文章

  1. HttpClient 以post的方式发送请求(由于请求参数太多所以改成以post提交表单的方式)

    1:Util类方法 /** * 发送 Post请求 * * @param url * @param reqXml * @return */ public static String post(Stri ...

  2. python+pytest接口自动化(6)-请求参数格式的确定

    我们在做接口测试之前,先需要根据接口文档或抓包接口数据,搞清楚被测接口的详细内容,其中就包含请求参数的编码格式,从而使用对应的参数格式发送请求.例如某个接口规定的请求主体的编码方式为 applicat ...

  3. http 请求参数之Query String Parameters、Form Data、Request Payload

    Query String Parameters 当发起一次GET请求时,参数会以url string的形式进行传递.即?后的字符串则为其请求参数,并以&作为分隔符. 如下http请求报文头: ...

  4. go-web 获取get/post请求中的请求头和表单数据

    package main import ( "fmt" "net/http" ) func handler(w http.ResponseWriter, r * ...

  5. form数据请求参数格式

    请求后台参数格式问题 当请求后台传递参数时,有多中类型,而每一种都需要前后台进行配合,而这有时候会很简单,有时候却十分困难,记录一下,以备后期深究 数据 后台需要的数据 form表单 嵌套数据,第二层 ...

  6. axios的请求参数格式(get、post、put、delete)

    1.get请求方式: axios.get(url[, config]) // [字符拼接型]axios.get(url?id=123&status=0') // 等同于 axios.get(u ...

  7. Servlet 响应 响应相关与重定向 请求 获取表单数据2种方法

    一.HttpServletResponse  (响应) 包括下面三个: 1.响应消息行  HTTP/1.1  200 OK 200是HTTP状态码, 代表请求已成功. (查httpservletres ...

  8. JavaWeb核心编程之(三.5)HTTP请求和接受表单数据

    HTTP简介WEB浏览器与WEB拂去其之间的一问一答的交互过程, 必须遵循一定的规则,这个规则就是HTTP协议HTTP是hypertext transfer protocol(超文本传输协议)的简写, ...

  9. fiddler修改请求表单数据

    一.使用出发点:进行测试某个添加编辑功能时候,部分字段前端限制了字段长度或者SQ,特殊字符等等的输入: 但是我们测试验证后端服务器是否处理,这个时候去修改提交请求表单,绕过前端的限制进行测试: 二.使 ...

随机推荐

  1. 2018.11.12 Spring事务的实现和原理

    Spring事务用法示例与实现原理 关于事务,简单来说,就是为了保证数据完整性而存在的一种工具,其主要有四大特性:原子性.一致性.隔离性和持久性.对于Spring事务,其最终还是在数据库层面实现的,而 ...

  2. static函数

    C语言中使用静态函数的好处:      静态函数会被自动分配在一个一直使用的存储区,直到退出应用程序实例,避免了调用函数时压栈出栈,速度快很多.       关键字“static”,译成中文就是“静态 ...

  3. css3中有关transform的问题

    Transform属性应用于元素的2D或3D转换.这个属性允许你将元素旋转,缩放,移动,倾斜等.

  4. iview+axios实现文件取消上传

    iview+axios实现文件取消上传 iview框架的上传文件目前不支持在上传文件的过程中取消上传,结合axios请求可以实现:使用iview的上传和拖拽功能,却使用axios的上传文件功能来实现取 ...

  5. Oracle oerr工具介绍

    (1)什么是oerr oerr是Oracle提供的在UNIX/Linux上查看Oracle错误的小工具,使用起来非常方便. (2)如何使用 oerr工具位于ORACLE_HOME下面,可以使用whic ...

  6. Data Guard 知识 (来自网络)

    更改DG工作模式前提参数得设定合理. Physical standby直接从主库接受archived log,然后直接做基于block的物理恢复(更新或调整变化的block),所以physical s ...

  7. JavaScript 基础(四) 循环

    JavaScript的循环有两种,一种是for 循环,通过初始条件,结束条件和递增条件来循环执行语句块: var x = 0; var i; for(i=1; i <=10000; i++){ ...

  8. Chino的成绩(chino的公开赛T3)

    题目背景 曾经幻想过未来的风景 或许有着另外一片天 小镇的远方 有着深远的回忆 也有着富有深情的诗篇 题目描述 Chino非常注重自己的成绩 Chino有 m 种方式给自己增加 rp 以增加成绩,她的 ...

  9. HDU 6354--Everything Has Changed(判断两圆关系+弧长计算)

    题目 题意:首先给定一个以原点为圆心,R为半径的圆,之后在给m个圆,这些圆可能会和原来的圆有所交集,计算开始的圆剩余区域的周长,不包括内部周长. 首先判定两圆关系,如果内含,直接加上圆的周长,如果相交 ...

  10. poj_1091_跳蚤

    Z城市居住着很多只跳蚤.在Z城市周六生活频道有一个娱乐节目.一只跳蚤将被请上一个高空钢丝的正中央.钢丝很长,可以看作是无限长.节目主持人会给该跳蚤发一张卡片.卡片上写有N+1个自然数.其中最后一个是M ...