如何使用InspiroBot.me API实现机器人生成励志图片并发送至文本频道?
解决InspiroBot API调用返回Content-Type为null的问题
嘿,我来帮你搞定这个InspiroBot API的问题!你遇到的Content-Type为null、调用getContent()报错的情况,大概率是因为InspiroBot的API会拦截没有合法User-Agent的请求——很多公共API都会这么做,用来过滤掉爬虫或者不规范的请求,导致你拿到的响应不完整。
解决思路
- 给请求添加模拟浏览器的
User-Agent头,让API认为这是正常的浏览器请求 - 正确读取API返回的内容:这个接口返回的是纯文本格式的图片URL,不是二进制文件,所以你需要把输入流转换成字符串来获取图片地址
- 拿到图片URL后,用你的机器人框架发送图片到文本频道
修正后的代码
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.net.URL; import java.net.URLConnection; public class InspiroBotExample { public static void main(String[] args) { try { // 初始化API请求地址 URL apiUrl = new URL("http://inspirobot.me/api?generate=true"); URLConnection connection = apiUrl.openConnection(); // 关键:设置User-Agent,模拟浏览器请求 connection.setRequestProperty("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36"); // 读取返回的图片URL(API返回的是单行文本) try (BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream()))) { String imageUrl = reader.readLine(); System.out.println("生成的励志图片URL: " + imageUrl); System.out.println("Content-Type: " + connection.getContentType()); // --------------------------- // 这里添加机器人发送图片的代码 // 举个Discord JDA的例子: // TextChannel channel = ...; // 获取目标文本频道 // channel.sendFile(new URL(imageUrl).openStream(), "inspire-quote.jpg").queue(); // --------------------------- } } catch (IOException e) { e.printStackTrace(); } } }
代码关键点说明
- User-Agent设置:这是解决问题的核心,没有这个头,API会拒绝返回完整响应,导致
Content-Type为null - 输入流读取:因为接口返回的是纯文本URL,用
BufferedReader的readLine()就能直接拿到完整的图片地址 - 机器人发送图片:不同的机器人框架发送图片的方式不同,比如Discord的JDA支持直接通过URL流发送,或者你也可以先下载图片到本地再发送
这样修改后,你应该能正常拿到图片URL,然后就可以把图片发送到文本频道啦!
内容的提问来源于stack exchange,提问作者RoverKnight
相关产品推荐
相关产品推荐

