gpt4 book ai didi

Java - HttpURLConnection 到 localhost 的工作方式与使用 postman-echo.com 不同

转载 作者:行者123 更新时间:2023-12-02 06:15:39 25 4
gpt4 key购买 nike

我有一个简单的 Java servlet 在 Tomcat 上运行 http://localhost:8081/myApp

我正在尝试从主方法中的测试工具向此发送 HTTP POST 请求。

目前我正在打印 servlet 上的方法和 header 。奇怪的是,即使我将连接方法设置为 POST,但在 servlet 上却是 GET。此外,其他 header 也丢失或不是我设置的。

但是,如果我使用 https://postman-echo.com/post作为 URL 而不是 http://localhost:8081/myApp它按预期工作。也就是说,我得到了 200 的响应代码和 json 正文的回显。

我的 servlet 上打印的内容:

方法:获取

header 名称:user-agent 值:Java/1.8.0_191

header 名称:主机值:localhost:8081

header 名称:accept,值:text/html、image/gif、image/jpeg、*; q=.2,/; q=.2

header 名称:连接值:keep-alive

这里一定有我缺少的东西。

public static void main(String[] args) {

//String ENDPOINT_URL = "http://localhost:8081/myApp";
String ENDPOINT_URL = "https://postman-echo.com/post";

String json = "{\"foo\":\"bar\"}";

System.out.println(json);

//open connection
try {
URL url = new URL(ENDPOINT_URL);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("POST"); //set to POST method
conn.setDoOutput(true);
conn.setDoInput(true);
conn.setAllowUserInteraction(false);

conn.setRequestProperty ("Content-type", "application/json"); //json
conn.setRequestProperty("Accept", "application/json");

//send the request
BufferedWriter reqWriter = new BufferedWriter(new OutputStreamWriter(conn.getOutputStream()));
reqWriter.write(json);
reqWriter.close();

int responseCode = conn.getResponseCode();
System.out.println(responseCode);

InputStream response = conn.getInputStream();
BufferedReader in =
new BufferedReader (new InputStreamReader (response));
String line;
while ((line = in.readLine()) != null) {
System.out.println(line);
}
in.close();



} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ProtocolException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}



}

最佳答案

方法conn.setDoOutput(true)实际上会触发conn.connect()。并且在调用 connect() 后,设置请求属性不起作用。设置所有请求属性后,尝试将语句移至某个位置。

关于Java - HttpURLConnection 到 localhost 的工作方式与使用 postman-echo.com 不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55873804/

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