我已经使用rubenlagus api在 Java 上创建了电报机器人。现在我无法设置 webhook。我知道 webhook 的这些规则:
*支持 IPv4,Webhooks 目前不支持 IPv6。
*接受来自 149.154.167.197-233 端口 443、80、88 或 8443 的传入 POST。
*能够处理 TLS1.0+ HTTPS 流量。
*提供受支持、非通配符、已验证或自签名证书。
*使用与您在设置时提供的域匹配的 CN 或 SAN。
*提供所有中间证书以完成验证链。
我有一个带有经过验证的 ssl 证书的域名。Qualys 测试显示 A+ 等级。服务器支持 IPv4。443 端口正在监听。并且服务器在端口 443 上接受来自 149.154.167.197-233 的传入 POST。我使用这个 rubenlagus api 方法来创建 TelegramApi
private static TelegramBotsApi createNoSelfSignedTelegramBotsApi() throws TelegramApiException {
return new TelegramBotsApi(
"src/main/resources/server.jks",//path to KeyStore for the server
"myPassword", //Key store password for the serve
"https://example.com:443", //External url
"https://localhost:443"); //Internal url
}
我已经通过这些命令获得了 server.jks
- openssl pkcs12 -export -in mydomain.net.crt -inkey mydomain.key > keypair.p12
- keytool -importkeystore -srckeystore keypair.p12 -destkeystore server.jks -srcstoretype pkcs12
这是我的代码:
ApiContextInitializer.init();
TelegramBotsApi botsApi = new TelegramBotsApi(
"src/main/resources/server.jks",
"mypassword",
"https://example.com:443",
"https://localhost:443");
BotHook webhookBot = new BotHook(options);
botsApi.registerBot(webhookBot);
当我启动程序时,我收到了这个
2018 年 7 月 28 日下午 3:27:59 org.glassfish.grizzly.http.server.NetworkListener 开始
信息:已启动侦听器绑定到 [localhost:443]
2018 年 7 月 28 日下午 3:27:59 org.glassfish.grizzly.http.server.HttpServer 开始
信息:[HttpServer] 已启动。
但是机器人不起作用。我在服务器的日志中看到了这一点:
2018/07/29 15:08:43 [错误] 1166#1166: *453 openat() "/var/www/www->root/data/www/example.net/callback/WebhookClass 失败(2:没有这样文件或>目录),客户端:149.154.167.227,服务器:example.net 请求:“POST >/callback/WebhookClass HTTP/1.1”,主机:“example.net”
Grizzly 似乎无法处理 http 请求。当我试图通过这个 curl 命令检查它时
curl -X POST -i http://217.0.0.1:443/callback
我收到这个
curl: (7) 连接217.0.0.1 443端口失败:连接超时
我多次检查了 TelegramBotsApi 构造函数中传递的所有参数。