0

一般的なPOSTメッセージをサーバーに送信するためにすでに何時間も試行しています。HTTPコアライブラリを使用しています。

すべてのヘッダーが正しく構成されているようですが、どういうわけかメッセージの本文(エンティティ)が削除され、サーバーに送信されていません。この問題は、「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()));
    }
4

1 に答える 1

0

この問題は、サーバーが期待継続ハンドシェイクを正しく処理していないために発生していると思います。プロトコル処理チェーンから RequestExpectContinue プロトコル インターセプターを削除し、違いが生じるかどうかを確認します。

于 2012-03-25T19:01:03.960 に答える