gpt4 book ai didi

java - Undertow Core HTTPS 服务器给出 400 Bad Request

转载 作者:行者123 更新时间:2023-12-01 16:18:43 27 4
gpt4 key购买 nike

我使用 io.undertow.core 设置了 Java HTTPS 服务器,创建了 HttpListener,看起来我的代码很完美,但是......它不起作用。对于任何请求,它都会给我 400 Bad Request。

下面是undertow、http等相关的代码:

package ru.epserv.epmodule.modules.serverapi;

import org.bukkit.Bukkit;
import org.json.simple.JSONObject;

import io.undertow.Undertow;
import io.undertow.server.HttpHandler;
import io.undertow.server.HttpServerExchange;
import ru.epserv.epmodule.modules.serverapi.contexts.BanwhyContext;
import ru.epserv.epmodule.modules.serverapi.contexts.FirstseenContext;
import ru.epserv.epmodule.modules.serverapi.contexts.GetPlayerContext;
import ru.epserv.epmodule.modules.serverapi.contexts.GetPlayersContext;
import ru.epserv.epmodule.modules.serverapi.contexts.GetWarningsContext;
import ru.epserv.epmodule.modules.serverapi.contexts.IsOnlineContext;
import ru.epserv.epmodule.modules.serverapi.contexts.LastseenContext;
import ru.epserv.epmodule.modules.serverapi.contexts.Ping;
import ru.epserv.epmodule.modules.serverapi.contexts.SendContext;
import ru.epserv.epmodule.modules.serverapi.contexts.SkillsContext;
import ru.epserv.epmodule.modules.serverapi.contexts.TimeplayedContext;
import ru.epserv.epmodule.modules.serverapi.contexts.UptimeContext;
import ru.epserv.epmodule.modules.serverapi.utils.ParsedRequest;

public class HTTPSServer {

public static String notFound;
public Undertow server;

@SuppressWarnings("unchecked")
public void start() {
JSONObject notFoundJSON = new JSONObject();
notFoundJSON.put("response", null);
notFoundJSON.put("error", "not_found");

HTTPSServer.notFound = notFoundJSON.toJSONString();

Ping ping = new Ping();
SendContext send = new SendContext();
GetPlayersContext list = new GetPlayersContext();
IsOnlineContext isOnline = new IsOnlineContext();
UptimeContext uptime = new UptimeContext();
FirstseenContext firstseen = new FirstseenContext();
LastseenContext lastseen = new LastseenContext();
TimeplayedContext timeplayed = new TimeplayedContext();
BanwhyContext banwhy = new BanwhyContext();
GetWarningsContext getWarnings = new GetWarningsContext();
SkillsContext skills = new SkillsContext();
GetPlayerContext getPlayer = new GetPlayerContext();

this.server = Undertow.builder()
.addHttpsListener(45105, "0.0.0.0", HTTPSServer.getSSLContextFromLetsEncrypt())
.setHandler(new HttpHandler() {

@Override
public void handleRequest(final HttpServerExchange t) throws Exception {
ParsedRequest r = new ParsedRequest(t);
r.setResponseHeader("Access-Control-Allow-Origin", "*");
Bukkit.getLogger().warning(r.getRequestURI().getPath());
switch (r.getRequestURI().getPath().substring(1).trim()) {
case "ping":
ping.handle(r, t);
break;
case "send":
send.handle(r, t);
break;
case "list":
list.handle(r, t);
break;
case "isonline":
ServerAPI.log
.warn("Отправлен запрос на устаревший адрес https://mc.epserv.ru:45105/isonline, "
+ "используйте isOnline. Адрес подключения: "
+ r.getRemoteAddress().toString() + ". User-Agent: "
+ r.getRequestHeaders().getFirst("User-Agent") + ".");
isOnline.handle(r, t);
break;
case "isOnline":
isOnline.handle(r, t);
break;
case "uptime":
uptime.handle(r, t);
break;
case "firstseen":
firstseen.handle(r, t);
break;
case "lastseen":
lastseen.handle(r, t);
break;
case "timeplayed":
timeplayed.handle(r, t);
break;
case "banwhy":
banwhy.handle(r, t);
break;
case "getWarnings":
getWarnings.handle(r, t);
break;
case "skills":
skills.handle(r, t);
break;
case "getPlayer":
getPlayer.handle(r, t);
break;
default:
r.setResponseCode(404);
r.write(HTTPSServer.notFound);
r.send();
}
}
})
.build();
this.server.start();
}

public void stop() {
server.stop();
}

}

我还尝试使用curl -v --data ""https://mc.epserv.ru:45105/list获取更多信息,这是输出:

boom@kali:~$ curl -v --data "" https://mc.epserv.ru:45105/list
* Trying 5.228.179.67:45105...
* TCP_NODELAY set
* Connected to mc.epserv.ru (5.228.179.67) port 45105 (#0)
* ALPN, offering h2
* ALPN, offering http/1.1
* successfully set certificate verify locations:
* CAfile: /etc/ssl/certs/ca-certificates.crt
CApath: /etc/ssl/certs
* TLSv1.3 (OUT), TLS handshake, Client hello (1):
* TLSv1.3 (IN), TLS handshake, Server hello (2):
* TLSv1.2 (IN), TLS handshake, Certificate (11):
* TLSv1.2 (IN), TLS handshake, Server key exchange (12):
* TLSv1.2 (IN), TLS handshake, Server finished (14):
* TLSv1.2 (OUT), TLS handshake, Client key exchange (16):
* TLSv1.2 (OUT), TLS change cipher, Change cipher spec (1):
* TLSv1.2 (OUT), TLS handshake, Finished (20):
* TLSv1.2 (IN), TLS handshake, Finished (20):
* SSL connection using TLSv1.2 / ECDHE-RSA-AES256-GCM-SHA384
* ALPN, server did not agree to a protocol
* Server certificate:
* subject: CN=mc.epserv.ru
* start date: May 18 13:27:54 2020 GMT
* expire date: Aug 16 13:27:54 2020 GMT
* subjectAltName: host "mc.epserv.ru" matched cert's "mc.epserv.ru"
* issuer: C=US; O=Let's Encrypt; CN=Let's Encrypt Authority X3
* SSL certificate verify ok.
> POST /list HTTP/1.1
> Host: mc.epserv.ru:45105
> User-Agent: curl/7.68.0
> Accept: */*
> Content-Length: 0
> Content-Type: application/x-www-form-urlencoded
>
* Mark bundle as not supporting multiuse
< HTTP/1.1 400 Bad Request
< Content-Length: 0
< Connection: close
<
* Closing connection 0
* TLSv1.2 (OUT), TLS alert, close notify (256):

我尝试使用 AccessLogHandlerRequestDumpingHandler,但什么也没有,Undertow 不会记录任何内容并继续响应 400 Bad Request。

我做错了什么?我发现了一个错误还是什么?怎么了?如果需要,请向我询问更多信息,如果我的英语不好,请向我询问

最佳答案

问题已解决 - 我使用 mvn install 再次构建了 Undertow(来自 https://github.com/undertow-io/undertow 存储库),现在它按预期工作。这可能是 Undertow 2.1.2.Final-SNAPSHOT 的一个错误,但在 Undertow 2.1.4.Final-SNAPSHOT 上一切都按需要工作。

关于java - Undertow Core HTTPS 服务器给出 400 Bad Request,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62331967/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com