HTTP post请求不响应生产环境(与tomcat服务器的战争)

时间:2018-05-07 10:31:51

标签: java apache http tomcat war

我已经实现了一个PerformHttpPostRequest函数,该函数应该发送包含JSON类型主体的post请求,并通过Apache HttpClient获取JSON响应。

public static String PerformHttpPostRequest(String url, String requestBody) throws IOException {

CloseableHttpClient client = HttpClients.createDefault();
HttpPost httpPost = new HttpPost(url);

StringEntity entity = new StringEntity(requestBody);

httpPost.setEntity(entity);
httpPost.setHeader("Accept", "application/json");
httpPost.setHeader("Content-type", "application/json");

CloseableHttpResponse response = client.execute(httpPost);

HttpEntity httpEntity = response.getEntity();
InputStream is = httpEntity.getContent();

return (new BufferedReader(new InputStreamReader(is, "UTF-8"))).readLine();
}

问题是,代码在开发环境中工作得很好,但是当使用tomcat服务器运行war文件但是没有执行请求时。

我尝试添加几个catch块,例如IOExceptionException,代码无法到达。

我添加了调试打印,证明代码在client.execute(...)命令停止响应。

该函数在try块内调用,在执行.execute(...)命令后,代码会进入finally块。

我已经搜索过类似的问题,但没有找到答案。

这是一个已知问题吗?有没有人知道是什么原因引起的?或者我该如何解决?

3 个答案:

答案 0 :(得分:0)

嗨Talor很高兴认识你, 请尝试使用HttpURLConnection来解决此问题:

Java - sending HTTP parameters via POST method easily

度过愉快的一天。

el profesor

答案 1 :(得分:0)

我尝试过使用RestTemplate。

RequestObject requestObject = new RequestObject();
        requestObject.setKey("abcd");
        requestObject.setEndpoint(serviceEndPoint);

        RestTemplate restTemplate = new RestTemplate();
        HttpEntity<RequestObject> requestBody = new HttpEntity<RequestObject>(
                requestObject);

        ResponseEntity<RequestObject> result = restTemplate.postForEntity(
                serviceEndPoint, requestBody, RequestObject.class);

它非常简单,无忧无虑,希望有所帮助

答案 2 :(得分:0)

你可以试试几件事。   - 尝试从运行tomcat的那个框中执行ping / curl。   - 尝试使用一种测试方法,该方法向始终可访问的服务器发出get请求。对于ex google.com并打印状态。这样你就可以知道你的代码在服务器环境中实际上是否正常工作。 希望这可以帮助。 :)