[java] Apache HttpClient를 사용하여 JSON 요청을 게시하는 방법은 무엇입니까?
다음과 같은 것이 있습니다.
final String url = "http://example.com";
final HttpClient httpClient = new HttpClient();
final PostMethod postMethod = new PostMethod(url);
postMethod.addRequestHeader("Content-Type", "application/json");
postMethod.addParameters(new NameValuePair[]{
new NameValuePair("name", "value)
});
httpClient.executeMethod(httpMethod);
postMethod.getResponseBodyAsStream();
postMethod.releaseConnection();
500으로 계속 돌아옵니다. 서비스 제공 업체에서 JSON을 보내야한다고 말합니다. Apache HttpClient 3.1+로 어떻게 수행됩니까?
답변
Apache HttpClient는 JSON에 대해 전혀 알지 못하므로 JSON을 별도로 구성해야합니다. 이를 위해 json.org 에서 간단한 JSON-java 라이브러리를 확인하는 것이 좋습니다 . ( “JSON-java”가 적합하지 않은 경우 json.org에는 다양한 언어로 제공되는 많은 라이브러리 목록이 있습니다.)
JSON을 생성했으면 아래 코드와 같은 것을 사용하여 게시 할 수 있습니다.
StringRequestEntity requestEntity = new StringRequestEntity(
JSON_STRING,
"application/json",
"UTF-8");
PostMethod postMethod = new PostMethod("http://example.com/action");
postMethod.setRequestEntity(requestEntity);
int statusCode = httpClient.executeMethod(postMethod);
편집하다
주-질문에서 요청한 위의 답변은 Apache HttpClient 3.1에 적용됩니다. 그러나 최신 Apache 클라이언트에 대한 구현을 찾는 모든 사람을 돕기 위해 :
StringEntity requestEntity = new StringEntity(
JSON_STRING,
ContentType.APPLICATION_JSON);
HttpPost postMethod = new HttpPost("http://example.com/action");
postMethod.setEntity(requestEntity);
HttpResponse rawResponse = httpclient.execute(postMethod);
답변
들어 아파치 HttpClient를 4.5 이상 버전 :
CloseableHttpClient httpclient = HttpClients.createDefault();
HttpPost httpPost = new HttpPost("http://targethost/login");
String JSON_STRING="";
HttpEntity stringEntity = new StringEntity(JSON_STRING,ContentType.APPLICATION_JSON);
httpPost.setEntity(stringEntity);
CloseableHttpResponse response2 = httpclient.execute(httpPost);
노트 :
1 코드를 컴파일하려면 httpclient
패키지와 httpcore
패키지를 모두 가져와야합니다.
2 try-catch 블록이 생략되었습니다.
참고 :
appache 공식 가이드
Commons HttpClient 프로젝트는 이제 수명이 종료되었으며 더 이상 개발되지 않습니다. HttpClient 및 HttpCore 모듈에서 Apache HttpComponents 프로젝트로 대체되었습니다.
답변
janoside 의 우수한 답변에서 언급했듯이 JSON 문자열을 구성하고 StringEntity
.
JSON 문자열을 구성하려면 익숙한 라이브러리 나 메서드를 사용할 수 있습니다. Jackson 라이브러리는 쉬운 예입니다.
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.node.ObjectNode;
import org.apache.http.entity.ContentType;
import org.apache.http.entity.StringEntity;
ObjectMapper mapper = new ObjectMapper();
ObjectNode node = mapper.createObjectNode();
node.put("name", "value"); // repeat as needed
String JSON_STRING = node.toString();
postMethod.setEntity(new StringEntity(JSON_STRING, ContentType.APPLICATION_JSON));