前言:前段時間由於需求,用Fiddler各種抓包,各種分析,主要是測試請求時添加cookie、添加請求頭、添加url, 雖然前面有一鍵轉換cookie/headers的工具(可以看我前面博客),但還是有些煩瑣。 想着能不能將Fiddler抓到的請求一鍵轉換成Python代碼,但是在網上找了一下,無果(有知道的同學可以評論留言,十分感謝), 於是決定自己寫一個能將Fiddler一鍵轉換成Python代碼的Python代碼。
話不多說,上代碼(如果覺得有更好的優化方案請聯繫我修改):
#!/usr/bin/python
# -*- coding: UTF-8 -*-
str_filename = "5_Full.txt"
# save_name = "re_test.py"
save_name = str_filename.replace("txt", "py")
class FidToPy():
def __init__(self, str_name, sa_name):
self.str_filename = str_name
self.save_name = sa_name
self.text = ""
self.url_list = []
self.headers = {}
self.cookies = {}
self.data = {}
def get_url(self):
infos = self.text.split("\n")[0]
self.url_list = [infos.split(" ")[0], infos.split(" ")[1]]
def get_headers(self):
infos = self.text.split("\n")[1:]
info = ""
for i in infos:
if "Cookie: " in i:
break
info += i + "\n"
headers = info.split("\n")
while "" in headers:
headers.remove("")
self.headers = {i.split(": ")[0]: i.split(": ")[1] for i in headers}
def get_cookies(self):
infos = self.text.split("\n")[1:]
for i in infos:
if "Cookie: " in i:
self.cookies = i.replace("Cookie: ", "")
break
self.cookies = {i.split("=")[0]: i.split("=")[1] for i in self.cookies.split("; ")}
def get_data(self):
try:
infos = self.text.split("\n")
for i in range(2, len(infos)):
if infos[i-1] == "" and "HTTP" in infos[i+1]:
self.data = infos[i]
break
self.data = {i.split("=")[0]: i.split("=")[1] for i in self.data.split("&")}
except:
pass
def get_req(self):
info_beg = "#!/usr/bin/python\n# -*- coding: UTF-8 -*-\nimport requests\n\n"
info_url = "url = \'{}\'\n".format(self.url_list[1])
info_headers = "headers = {}\n".format(self.headers)
info_cookies = "cookies = {}\n".format(self.cookies)
info_data = "data = {}\n\n".format(self.data)
if "GET" in self.url_list[0]:
info_req = "html = requests.get(url, headers=headers, verify=False, cookies=cookies)\n"
else:
info_req = "html = requests.post(url, headers=headers, verify=False, cookies=cookies, data=data)\n"
info_end = "print(len(html.text))\nprint(html.text)\n"
text = info_beg + info_url + info_headers + info_cookies + info_data + info_req + info_end
with open(save_name, "w+", encoding="utf8") as p:
p.write(text)
print("轉化成功!!")
print(save_name, "文件保存!")
def read_infos(self):
with open(self.str_filename, "r+", encoding="utf-8") as p:
old_line = ""
for line in p:
if old_line == b"\n" and line.encode() == b"\n":
break
old_line = line.encode()
self.text += old_line.decode()
# print("self.text:", self.text)
def start(self):
self.read_infos()
self.get_url()
self.get_headers()
self.get_cookies()
self.get_data()
print("self.url_list:", self.url_list)
print("self.headers:", self.headers)
print("self.cookies:", self.cookies)
print("self.data:", self.data)
self.get_req()
if __name__ == '__main__':
f = FidToPy(str_filename, save_name)
f.start()
使用教程:
首先從Fiddler選中你要轉換的請求 -> Save -> Selected Session -> as Text(也可以選擇as Text(Header only)...),如圖所示:
這樣,我們就得到了包含了這個請求的txt文本:
把這個文件移動到和前面Python代碼同一個文件夾,然後修改Python中第四行的,改成你請求信息txt文件的名字,如:
str_filename = "15_Full.txt"
右鍵運行,就可以得到一個同名的.py文件,這個就是我們要的Python請求代碼了,so simply!!
效果圖:
原創不易,轉載請標明出處。