#當提交的表單數據格式爲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"=>"1" "source"=>"1" "course_name_id"=>"3" "tel"=>"18883612485" "customer_name"=>"測試" "sex"=>"0" "school"=>"ce'w's" "intro_id"=>"2340"
#優化對時間的處理php