我已经实现了一个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块,例如IOException
,Exception
,代码无法到达。
我添加了调试打印,证明代码在client.execute(...)
命令停止响应。
该函数在try
块内调用,在执行.execute(...)
命令后,代码会进入finally
块。
我已经搜索过类似的问题,但没有找到答案。
这是一个已知问题吗?有没有人知道是什么原因引起的?或者我该如何解决?
答案 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并打印状态。这样你就可以知道你的代码在服务器环境中实际上是否正常工作。 希望这可以帮助。 :)