2014-02-28 6 views
13

Apache 구성 요소 (4.3) - http://hc.apache.org/httpcomponents-client-4.3.x/tutorial/html/fluent.html의 예를 사용하여 http POST를 작성하려고합니다. 불행히도 해결 방법을 찾을 수 없다는 오류가 나타납니다.아파치 구성 요소의 유창을 사용하는 방법

이전에 HttpClient을 사용 했으므로 구성 요소를 처음 사용합니다. 여기

코드의 조각입니다 :

String address = "http://1.1.1.1/services/postPositions.php"; 
String response = Request.Post(address) 
     .bodyString("Important stuff", ContentType.DEFAULT_TEXT) 
     .execute().returnContent().asString(); 
System.out.println(response); 

을 내가 그 코드를 실행할 때 예외가 얻을 : 나뿐만 아니라 양식 요소를 구축하고를 사용하는 것을 시도했다

Exception in thread "main" java.lang.IllegalStateException: POST request cannot enclose an entity 
    at org.apache.http.client.fluent.Request.body(Request.java:299) 
    at org.apache.http.client.fluent.Request.bodyString(Request.java:331) 
    at PostJson.main(PostJson.java:143) 

bodyForm() 방법 -하지만 같은 오류가 발생합니다.

답변

6

동일한 문제가 있었지만 해결 된 것은 Apache Client 4.3.1을 사용하는 것입니다.

는 요청이 변경된 것 같습니다 : 4.3.1에서

  • 들이 최신 릴리스에서 공공 HttpRequestBase
  • 을 사용하여 그들이 패키지가 완벽하게하기 위해 InternalHttpRequest
+1

문구가 명확하지 않습니다. 당신은 당신에게 *** 같은 문제가 있다고 말하고 있습니까? 그리고 이것은 해결책입니까? 아니면 당신은 똑같은 문제가 있다고 말하면서도 여전히 해결책을 찾고 있습니까? –

+0

명확한 답변. – swKK

+0

이 답변과 다른 대답이 모두 도움이되었습니다. 그러나이 대답이 나에게 해결 방법을 가져다 줬기 때문에 이것을 바로 대답으로 표시하기로 결정했습니다 .-) –

1

나는 파기를했는데 어떻게 작동 하는지를 볼 수 없었습니다 (버그를 발견했을 수도 있습니다).

오류는 최신 트렁크 버전의 line 300 in Request에서 발생합니다. 거기에서 this.request이 요청 생성자의 라인 130에서 항상 InternalHttpRequest의 인스턴스로 설정되고 InternalHttpRequestorg.apache.http.HttpEntityEnclosingRequest`을 구현하지 않기 때문에 this.request instanceof HttpEntityEnclosingRequest이 참이되는지 확인하는 검사가 수행됩니다.

+0

원인을 설명해 주셔서 감사합니다. 이 답변도 정확합니다. 위의 설명을 참조하십시오. –

1

보호 사용 Fluent API를 사용하지 않고이를 수행 할 수있는 방법을 게시 할 것입니다.

public void createAndExecuteRequest() throws ClientProtocolException, IOException { 
    CloseableHttpClient httpclient = HttpClients.createDefault(); 
    HttpPost httppost = new HttpPost(host); 
    httppost.setEntity(new StringEntity("Payload goes here")); 
    try (CloseableHttpResponse response = httpclient.execute(httppost)) { 
     // do something with response 
    } 
} 
:이 질문 "어떻게 아파치 구성 요소를 유창하게 사용하기"를 응답하지 않는 경우에도, 나는 아래, 간단한 경우는, 솔루션은 버그를 가지고 버전의 작동 지적 가치가있다 생각

제 경우에는 다운 그레이드가 옵션이 아니므로 이것이 최고의 솔루션이었습니다.

관련 문제