2012-03-25 18 views
0

已尝试向服务器发送一般POST消息的小时数。 我正在使用HTTP核心库。当使用Java HttpCore发送请求时,HttpRequest实体(主体)为空

所有头文件似乎都是正确编写的,但不知何故消息的正文(实体)正在被删除并且未发送到服务器。 调用“process”命令或相同的“preProcess”后会出现该问题。 注意:这与官方的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

我认为这个问题是由于服务器没有正确处理expect-continue握手造成的。从协议处理链中移除RequestExpectContinue协议拦截器,看看是否有任何区别。

相关问题