You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 20:54:03