웹 서비스에 대한 POST 요청에 Apache HttpClient를 사용합니다. 내가HttpClient POST 요청은 본문없이 상태 200을 반환합니다 (그러나 반드시 있어야 함). 내용의 길이는 -1
httpResult = 200을 받고 있어요 그러나 시체가 없다. 나는 어떤 몸체가 인 것으로 알고있다. 내가 다른 POST 호출 메서드를 사용할 때 JSON 형식으로 몸체를 가져올 것이다.
이 방법에서는 응답 본문의 길이가 -1입니다.
response.getEntity(). getContentLength() = -1;
결과는 입니다. EntityUtils.toString (response.getEntity())은 빈 문자열입니다.
코드는 다음과 같습니다
CloseableHttpClient client = HttpClients.createDefault(); HttpPost httpPost = new HttpPost(url); JSONObject attributes = new JSONObject(); JSONObject main = new JSONObject(); attributes.put("201", "Frank"); main.put("attributes", attributes); main.put("primary", "2"); String json = main.toString(); StringEntity entity = new StringEntity(json); httpPost.setEntity(entity); httpPost.setHeader("Accept", "application/json"); httpPost.setHeader("Content-type", "application/json"); CloseableHttpResponse response = client.execute(httpPost); httpResult = response.getStatusLine().getStatusCode(); client.close(); if (httpResult == HttpURLConnection.HTTP_OK) { HttpEntity ent = response.getEntity(); Long length = ent.getContentLength(); System.out.println("Length: " + length);// length = -1 }
는 사람이 어떻게 문제를 해결하기 위해 내 몇 가지 힌트를 줄 수 있을까?
정확한 응답 본문을 제공하는 코드를 추가하고 싶습니다. 이 경우에는 HttpURLConnection을 사용합니다.
HttpURLConnection urlConnect = (HttpURLConnection) url.openConnection(); urlConnect.setConnectTimeout(10000); urlConnect.setRequestProperty("Accept", "application/json"); urlConnect.setRequestProperty("Content-Type", "application/json"); urlConnect.setRequestMethod("POST"); JSONObject attributes = new JSONObject(); JSONObject main = new JSONObject(); attributes.put("201", "Frank"); main.put("primary", "2"); main.put("attributes", attributes); urlConnect.setDoOutput(true); OutputStreamWriter wr = new OutputStreamWriter(urlConnect.getOutputStream()); wr.write(main.toString()); wr.flush(); httpResult = urlConnect.getResponseCode(); System.out.println("Http Result: " + httpResult); if (httpResult == HttpURLConnection.HTTP_OK) { InputStream response = urlConnect.getInputStream(); // correct not empty response body ... }
사용 추출 뭐죠'EntityUtils.toString (response.getEntity())'의 결과? –
** EntityUtils.toString (response.getEntity()) **의 결과는 빈 문자열입니다. –
자, 자. 응답으로 엔티티가 반환되지 않으므로 길이는 -1입니다. 다른 http 클라이언트를 사용할 때 응답을받을 수 있습니까? –