Python如何发送PURGE方法请求并校验响应,解决相关报错
报错原因
requests库仅封装了GET、POST、PUT、DELETE等标准HTTP方法的快捷调用函数,PURGE是缓存服务(Nginx缓存、Varnish等)自定义的非标准HTTP方法,因此不存在requests.purge()这个内置方法,调用就会触发AttributeError。
修复方法
直接调用requests的通用请求接口request(),手动指定method参数为PURGE即可,同时修正你代码中存在的其他潜在问题:
- 读取到的目标文件路径未去除换行符,可能导致读取目标文件失败
- 缺少请求超时配置,遇到无响应站点会永久卡住
- 终端颜色输出语法错误,无法正常显示彩色提示
修复后完整代码如下:
#!/usr/bin/env python3 # -*- coding: utf-8 -*- import os import requests with open('new-target.txt', 'rb') as f: f.seek(-2, os.SEEK_END) while f.read(1) != b'\n': f.seek(-2, os.SEEK_CUR) # 读取路径后去除空白符/换行符 filepath = f.readline().decode().strip() with open(filepath) as fp: line = fp.readline() cnt = 1 while line: x = line.strip() try: # 用通用request方法指定PURGE请求,加10秒超时 resp = requests.request(method="PURGE", url=x + "/", timeout=10) if resp.status_code == 200: # 修正颜色输出语法 print("\033[1;32;40m [Method - PURGE] \033[0m \033[1;31;40m Vulnerable: \033[0m" + x) # 捕获请求异常避免程序崩溃 except requests.exceptions.RequestException: pass line = fp.readline() cnt += 1
可选优化点
- 如果目标缓存服务校验请求来源,可以在
request()参数中添加headers自定义请求头,比如配置X-Forwarded-For: 127.0.0.1绕过来源限制 - 可以增加200之外的状态码校验,部分缓存服务PURGE成功会返回204状态码
内容的提问来源于stack exchange,提问作者Ugroon
相关产品推荐
相关产品推荐

