You need to enable JavaScript to run this app. Telegram Bot发送本地cute_dogs目录随机图片报400 wrong HTTP URL错误如何修复
优惠活动
大模型
产品
解决方案
定价
更多

Telegram Bot发送本地cute_dogs目录随机图片报400 wrong HTTP URL错误如何修复

报错根因
  • 触发wrong HTTP URL specified报错的核心逻辑:telebot的send_photo方法收到字符串类型的图片入参时,会直接把字符串当作公网可访问的HTTP/HTTPS URL传给Telegram官方服务器,要求服务器自行拉取该URL的图片。你传入的是本地相对路径字符串,不符合合法URL格式,因此接口返回400错误。
修复实现方案

核心改造点

  • 不再直接传递本地路径字符串,改为以二进制只读模式打开本地图片文件,将文件句柄作为send_photo的入参,此时telebot会直接读取本地文件内容上传给Telegram,不需要走URL拉取流程
  • 加入随机选取逻辑,从目录的有效图片列表中随机抽选1张发送
  • 加入文件格式校验,避免误传非图片文件

完整参考代码

import os
import random
from telebot import TeleBot

# 替换为你自己的Bot Token
bot = TeleBot("YOUR_BOT_TOKEN")
# 基于当前脚本路径拼接图片目录绝对路径,避免相对路径定位偏差
DOG_IMG_FOLDER = os.path.join(os.path.dirname(os.path.abspath(__file__)), "cute_dogs")

def pick_random_dog_image():
    # 定义合法图片后缀
    SUPPORTED_EXTS = (".jpg", ".jpeg", ".png", ".gif", ".webp")
    all_entries = os.listdir(DOG_IMG_FOLDER)
    # 过滤出目录下的有效图片文件
    valid_imgs = []
    for entry in all_entries:
        full_path = os.path.join(DOG_IMG_FOLDER, entry)
        if os.path.isfile(full_path) and entry.lower().endswith(SUPPORTED_EXTS):
            valid_imgs.append(full_path)
    if not valid_imgs:
        return None
    # 随机选一张图片的完整路径
    selected_path = random.choice(valid_imgs)
    # 返回二进制打开的文件句柄
    return open(selected_path, "rb")

# 匹配关键词的消息处理逻辑
@bot.message_handler(func=lambda msg: "狗狗" in msg.text and "发图" in msg.text)
def handle_dog_pic_request(message):
    img_file = pick_random_dog_image()
    if not img_file:
        bot.reply_to(message, "当前没有可用的狗狗图片")
        return
    # 传入文件句柄发送图片
    bot.send_photo(message.chat.id, img_file)
    # 发送完成后关闭文件句柄,释放系统资源
    img_file.close()

# 启动bot轮询
bot.infinity_polling()
避坑提示
  • 不要为了图省事直接把路径字符串塞给send_photo,本地路径永远会触发这个400报错
  • 长期运行的服务一定要记得关闭打开的文件句柄,否则会出现系统文件句柄耗尽的问题
  • 尽量用绝对路径定位图片目录,不要直接写"cute_dogs/xxx.jpg"这类相对路径,换运行目录后会出现找不到文件的问题
  • 过滤文件列表时不要只检查后缀,要判断条目是文件而非子目录,避免遍历嵌套文件夹触发错误

内容的提问来源于stack exchange,提问作者BELEЦKIY

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.08 22:06:00