gpt4 book ai didi

java - 如何使用 Undertow 启用跨域源

转载 作者:太空宇宙 更新时间:2023-11-04 11:53:38 26 4
gpt4 key购买 nike

我创建了一个网络服务器,允许我的网站通过 API 访问我的游戏数据。我的网络服务器看起来像这样(我正在使用 me.apachenick 框架)

public class WebServer {
public static void initialize() {
ServerController server = new ServerController("192.168.0.21", 8080, 8443);
server.register(new APIVirtualHost());
server.inititialize();
}
}

我的 APIVirtualHost 看起来像这样

public class APIVirtualHost extends AbstractVirtualHost {
public static final String HOST_NAME = "XX.X.XX.XXX";

public APIVirtualHost() {
super(HOST_NAME);
setDirectoryListingEnabled(false);
}
}

显示在线玩家的示例路由如下所示

@RouteManifest(template="/online/players", method="GET")
public class APIHighscoresRoute extends RouteHttpHandler<JadePreprocessor> {
@Override
public void handleRequest(HttpServerExchange exchange) throws Exception {
Gson builder = new GsonBuilder().setPrettyPrinting().create();
JsonArray arr = new JsonArray();
World.getPlayers().forEach(o -> {
JsonObject obj = new JsonObject();
obj.addProperty("username", o.getUsername());
arr.add(obj);
});
exchange.getResponseHeaders().put(Headers.CONTENT_TYPE, "text/html");
exchange.getResponseSender().send(builder.toJson(arr));
}
}

当我现在运行网络服务器 (WebServer.initialize()) 并从我的浏览器转到 XX.X.XX.XX:8080/online/players -这很好用!我能够看到世界上所有的玩家。

但是,当我像这样从 PHP 发送 cURL 请求时

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'http://XX.X.XX.XXX:8080/online/players');
curl_setopt($ch, CURLOPT_PORT, 8088);
curl_setopt($ch,CURLOPT_USERAGENT,'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.13) Gecko/20080311 Firefox/2.0.0.13');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
$response = curl_exec($ch);
var_dump($response);
echo curl_getinfo($ch) . '<br/>';
echo curl_errno($ch) . '<br/>';
echo curl_error($ch) . '<br/>';
curl_close($ch);

我收到这个错误:

bool(false)
Array
7
Failed to connect to XX.X.XX.XXX port 8088: Connection refused

这告诉我在请求的资源上未启用跨源。如何在我的 Java Web 服务器上启用跨源?

最佳答案

我认为这不是 CORS 问题,而是您的 curl 配置问题。您正在尝试通过 8088 端口连接,但服务在 8080 上,更改为(或从配置中删除,您已经在 CURLOPT_URL 参数中拥有它):

curl_setopt($ch, CURLOPT_PORT, 8080);

关于java - 如何使用 Undertow 启用跨域源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55208632/

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