gpt4 book ai didi

java - Vertx POST 不起作用 -> 错误 404

转载 作者:行者123 更新时间:2023-12-01 21:17:02 27 4
gpt4 key购买 nike

我不知道为什么,但我用 Vertx 做的帖子根本不起作用。一直错误都是404。
我在纯 Java 中使用了相同的链接和正文,并且我收到了来自服务器的响应。我做错了什么?

HttpClient client = vertx.createHttpClient();

HttpClientRequest request =
client.post("https://login.windows.net/common/oauth2/token").handler(res->{
System.out.println(res.statusCode());
}).putHeader(HttpHeaders.CONTENT_LENGTH,String.valueOf(buffer.length()))
.putHeader(HttpHeaders.CONTENT_TYPE,"application/x-www-form-urlencoded").write(buffer);
request.end();

我基本上是使用 Azure 进行身份验证,对于响应,我应该获得带有 token 和其他信息的 JSON。对于纯 Java 来说是可行的,但我们需要让它与 Vertx 一起工作。

编辑 - 这段代码有效 - 我得到 JSON 返回,但不是 vertx

String url = "https://login.microsoftonline.com/common/oauth2/token";
URL obj = null;
obj = new URL(url);
HttpsURLConnection con = null;
con = (HttpsURLConnection) obj.openConnection();

//add reuqest header
con.setRequestMethod("POST");
con.setRequestProperty("User-Agent", USER_AGENT);
con.setRequestProperty("Host", "login.microsoftonline.com");
con.setRequestProperty("Cache-Control", "no-cache");
con.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");

// Send post request
con.setDoOutput(true);
DataOutputStream wr = null;

wr = new DataOutputStream(con.getOutputStream());
wr.writeBytes(urlParameters);
wr.flush();
wr.close();

int responseCode = 0;
responseCode = con.getResponseCode();

System.out.println("\nSending 'POST' request to URL : " + url);
System.out.println("Post parameters : " + urlParameters);
System.out.println("Response Code : " + responseCode);

BufferedReader in = null;
in = new BufferedReader(
new InputStreamReader(con.getInputStream()));

String inputLine;
StringBuffer response = new StringBuffer();

while ((inputLine = in.readLine()) != null) {
response.append(inputLine);
}

in.close();

//print result
System.out.println(response.toString());

最佳答案

该问题似乎是由于在未启用 SSL 并指定 443 端口的情况下请求 HTTPS url 引起的。 Vert.x httpclient默认支持HTTP请求访问Web主机的80端口。您需要通过 HttpClientOptions 启用 httpclient 的 SSL 支持。

请尝试使用下面的代码而不是您的代码。

HttpClient client = vertx.createHttpClient(new HttpClientOptions().setSsl(true).setTrustAll(true));
HttpClientRequest request = client.post(443, "login.windows.net", "/common/oauth2/token").handler(res->{
System.out.println(res.statusCode());
}).putHeader(HttpHeaders.CONTENT_LENGTH,String.valueOf(buffer.length()))
.putHeader(HttpHeaders.CONTENT_TYPE,"application/x-www-form-urlencoded").write(buffer);
request.end();

引用请查看官方文档http://vertx.io/docs/vertx-core/java/#_using_https_with_vert_x以及 GitHub https://github.com/vert-x3/vertx-examples/blob/master/core-examples/src/main/java/io/vertx/example/core/http/https/Client.java 中的代码示例.

关于java - Vertx POST 不起作用 -> 错误 404,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39847327/

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