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

使用argparse读取文件拼接URL请求时持续返回404问题排查

问题分析与修复方案

核心问题排查

  • 单词含换行符:从文件逐行读取的单词会保留末尾的\n,拼接后URL变成{target}/word\n,属于无效路径,直接导致404。必须用strip()去除换行符和首尾空白。
  • 错误递归逻辑:遇到404时递归调用loop()会触发无限递归,既破坏遍历逻辑,还会引发栈溢出。正确逻辑是继续遍历下一个单词,而非重新启动循环。
  • 参数校验缺失:-u参数未设置必填,若用户未输入目标URL,target为空,拼接后的URL必然无效。需强制要求该参数。
  • JSON解析风险:若响应内容非JSON格式,调用res.json()会抛出异常,需添加异常处理。

修复后的代码

import requests
import argparse

parser = argparse.ArgumentParser(description='遍历单词列表拼接URL发送请求')
parser.add_argument("-u", required=True, help="目标基础URL,例如https://example.com")
parser.add_argument("-f", required=True, type=argparse.FileType('r'), help="单词列表文件路径")
args = parser.parse_args()
target = args.u
wordlist = args.f

def scan_paths():
    # 读取所有行并处理换行符,过滤空行后关闭文件
    words = [word.strip() for word in wordlist if word.strip()]
    wordlist.close()
    
    for word in words:
        # 处理URL末尾已有/的情况,避免出现//
        url = f"{target.rstrip('/')}/{word}"
        print(f"请求路径: {url}")
        try:
            res = requests.get(url)
            print(f"路径: {word} | 状态码: {res.status_code}")
            if res.status_code != 404:
                try:
                    data = res.json()
                    print(f"响应JSON: {data}")
                except ValueError:
                    print("提示:响应内容非JSON格式")
        except requests.exceptions.RequestException as e:
            print(f"请求失败: {str(e)}")

scan_paths()

修复说明

  1. 用argparse.FileType('r')替代直接type=open,符合argparse最佳实践,自动管理文件打开模式。
  2. 过滤空行,避免请求无效的空路径。
  3. 用target.rstrip('/')处理目标URL末尾的斜杠,防止拼接后出现//的无效格式。
  4. 添加网络请求异常捕获,处理连接超时、DNS解析失败等问题。
  5. 移除错误递归,改为正常循环遍历单词列表。
  6. 给参数添加必填约束和帮助信息,提升工具易用性。

内容的提问来源于stack exchange,提问作者Berkan Özelmacı

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 15:42:47