最后编辑时间:2024-09-13 09:23:09 星期五
前置知识:
POST
请求和GET
请求我们先来看看不使用python来进行请求的情况
?=&=
//例如
http://127.0.0.1:8080?str="你好"
http://127.0.0.1:1145/flag.php?data="flag"&str="Hello"
POST
并不简单,在这里借助HackBar
插件来进行Load URL
,以及Post Data
,填入请求Execute
十分甚至九分的麻烦,每一次都要手动调整,不能全自动填充,返回的也是浏览器页面,需要人工识别再次请求。
curl -X POST -H "flag=我是post请求" http://127.0.0.1:8080?data="我是get请求"
终于可以自动填充了,但是shell语法并不是所有人都会(难写)。而且返回的是页面HTML代码,没办法自定义获取处理,顶多算一个半自动
先贴代码
# 导入requests库
import requests
# 获取响应文本
def getStr(session:requests.Session , url:str , postData: dict[str, str]) -> str:
# 进行POST请求
response: requests.Response = session.post(url,postData)
# 获取POST响应内容
text: str =response.text
# 传入文本处理函数
textList: list[str] = textProcessing(text)
#其它业务逻辑,比方说再次请求
#可选,用于debug
print(text)
return text
def textProcessing(text:str)->list:
#在这里放置你要的文本处理逻辑
textList: list[str] = list(map(str,text.split("n")))
return textList
if __name__=="__main__":
#使用 requests.session()保存登录状态
session: requests.Session = requests.session()
#放入你要请求的网站
url:str ="http://127.0.0.1:80"
#放入你要请求的post数据
postData: dict[str, str] = {
"data" : "flag",
"str" : "1145"
}
#使用函数
getStr(session,url,postData)
口瓜 ,你这一点都不python,为什么有一堆类型标注
(实际上我还开了类型检查
如果你实在觉得这段代码不优雅,这里有个你能接受的版本
# 导入requests库
import requests
# 获取响应文本
def getStr(session , url , postData:]):
# 进行POST请求
response = session.post(url,postData)
# 获取POST响应内容
text =response.text
# 传入文本处理函数
textList = textProcessing(text)
#其它业务逻辑,比方说再次请求
#可选,用于debug
print(text)
return text
def textProcessing(text):
#在这里放置你要的文本处理逻辑
textList = list(map(str,text.split("n")))
return textList
if __name__=="__main__":
#使用 requests.session()保存登录状态
session = requests.session()
#放入你要请求的网站
url="http://127.0.0.1:80"
#放入你要请求的post数据
postData= {
"data" : "flag",
"str" : "1145"
}
#使用函数
getStr(session,url,postData)
强大、优雅、美丽!我们只需要把网站当成一个I/O设备就可以轻松的请求和发送请求了。
顺带一提,只要改一点点小地方,就是爬虫
了
POST
提交的direct参数
标签的,这就好办了# 导入requests库
import requests
# 导入正则库
import re
# 获取响应文本
def getStr(session:requests.Session , url:str , postData: dict[str, str]) -> None:
# 进行POST请求
response: requests.Response = session.post(url,postData)
# 获取POST响应内容
text: str =response.text
# 传入文本处理函数
textProcessing(session,url,text)
def textProcessing(session:requests.Session , url:str,text:str)->None:
#在这里放置你要的文本处理逻辑
textList: list[str] = list(map(str,text.split("n")))
#存储计算结果
Post:str=""
#匹配h2标签
pattern: re.Pattern[str] = re.compile(r'(.*?)
', re.DOTALL)
for line in textList:
match: re.Match[str] | None = pattern.search(line)
if match:
Post:str = str(eval(match.group(1)))#计算算式
postData:dict[str,str]={"direc":Post}
getStr(session,url,postData)#再次请求
break
else:
print(text)#找到了flag
if __name__=="__main__":
#使用 requests.session()保存登录状态
session: requests.Session = requests.session()
#放入你要请求的网站
url:str ="http://127.0.0.1:80"
#放入你要请求的post数据
postData: dict[str, str] = {}
#使用函数
getStr(session,url,postData)
同样提供优雅版
# 导入requests库
import requests
# 导入正则库
import re
# 获取响应文本
def getStr(session , url , postData):
# 进行POST请求
response = session.post(url,postData)
# 获取POST响应内容
text =response.text
# 传入文本处理函数
textProcessing(session,url,text)
def textProcessing(session , url , text):
#在这里放置你要的文本处理逻辑
textList = list(map(str,text.split("n")))
#存储计算结果
Post = ""
#匹配h2标签
pattern = re.compile(r'(.*?)
', re.DOTALL)
for line in textList:
match = pattern.search(line)
if match:
Post = str(eval(match.group(1)))#计算算式
postData = {"direc":Post}
getStr(session,url,postData)#再次请求
break
else:
print(text)#找到了flag
if __name__=="__main__":
#使用 requests.session()保存登录状态
session = requests.session()
#放入你要请求的网站
url ="http://127.0.0.1:80"
#放入你要请求的post数据
postData = {}
#使用函数
getStr(session,url,postData)
运行,坐等flag上门
Python是世界上最好的语言.cpp
参与评论
手机查看
返回顶部