2012-03-25 2 views
0

이미 일반 POST 메시지를 서버에 보내려면 시간이 걸립니다. HTTP Core 라이브러리를 사용하고 있습니다.HttpRequest Java HttpCore를 사용하여 요청을 보낸 경우 HttpRequest 엔터티 (본문)가 비어 있습니다.

모든 헤더가 올바르게 구성되어 있지만 메시지의 본문 (엔터티)이 삭제되어 서버로 보내지지 않습니다. "프로세스"명령 또는 동일한 "프로세스"를 호출 한 후 문제가 발생합니다. 참고 : 이는 공식 Apache 예제와 실질적으로 동일합니다. 모든 조언에 감사드립니다.

import java.net.*; 
import org.apache.http.HttpHost; 
import org.apache.http.HttpRequestInterceptor; 
import org.apache.http.HttpResponse; 
import org.apache.http.HttpVersion; 
import org.apache.http.entity.StringEntity; 
import org.apache.http.impl.DefaultHttpClientConnection; 
import org.apache.http.message.BasicHttpEntityEnclosingRequest; 
import org.apache.http.params.HttpParams; 
import org.apache.http.params.HttpProtocolParams; 
import org.apache.http.params.SyncBasicHttpParams; 
import org.apache.http.protocol.HttpContext; 
import org.apache.http.protocol.BasicHttpContext; 
import org.apache.http.protocol.ExecutionContext; 
import org.apache.http.protocol.HttpProcessor; 
import org.apache.http.protocol.HttpRequestExecutor; 
import org.apache.http.protocol.ImmutableHttpProcessor; 
import org.apache.http.protocol.RequestConnControl; 
import org.apache.http.protocol.RequestContent; 
import org.apache.http.protocol.RequestExpectContinue; 
import org.apache.http.protocol.RequestTargetHost; 
import org.apache.http.protocol.RequestUserAgent; 
import org.apache.http.util.EntityUtils; 

public class HTTPCommunicator 
{ 
    public static String TOKEN = null; 

    public static void main(String[] args) throws Exception 
    {   
     BasicHttpEntityEnclosingRequest request = new BasicHttpEntityEnclosingRequest("POST", "/api"); 

     HttpHost host = new HttpHost("localhost", 80); 

     HttpRequestExecutor httpexecutor = new HttpRequestExecutor(); 
     HttpContext context = new BasicHttpContext(null); 
     DefaultHttpClientConnection conn = new DefaultHttpClientConnection(); 
     context.setAttribute(ExecutionContext.HTTP_CONNECTION, conn); 
     context.setAttribute(ExecutionContext.HTTP_TARGET_HOST, host); 

     request.addHeader("Host", "localhost"); 
     request.addHeader("Accept", "application/json,application/xml"); 
     request.addHeader("Accept-Encoding", "gzip, deflate"); 

     HttpParams params = new SyncBasicHttpParams(); 
     HttpProtocolParams.setVersion(params, HttpVersion.HTTP_1_1); 
     HttpProtocolParams.setContentCharset(params, "UTF-8"); 
     HttpProtocolParams.setUserAgent(params, "MyClient"); 
     HttpProtocolParams.setUseExpectContinue(params, true); 

     request.setParams(params);  

     String sRequest = "userName=yourusername&password=yourpassword"; 
     request.setEntity(new StringEntity(sRequest)); 

     HttpProcessor httpproc = new ImmutableHttpProcessor(new HttpRequestInterceptor[] { 
       // Required protocol interceptors 
     new RequestContent(), new RequestTargetHost(), 
       // Recommended protocol interceptors 
     new RequestConnControl(), new RequestUserAgent(), new RequestExpectContinue() }); 

     httpproc.process(request, context); 

     //httpexecutor.preProcess(request, httpproc, context); 

     //Sending request 
     Socket socket = new Socket(host.getHostName(), host.getPort()); 
     conn.bind(socket, params); 
     HttpResponse response = httpexecutor.execute(request, conn, context); 

     System.out.println(EntityUtils.toString(response.getEntity())); 
    } 

답변

0

나는 문제가 서버에 의해 발생 올바르게 기대-계속 악수를 처리하지 생각. RequestExpectContinue 프로토콜 인터셉터를 프로토콜 처리 체인에서 제거하고 차이가 있는지 확인하십시오.