如何保持HttpClient的连接保持?HttpClient

2023-09-06 05:08:05 作者:forever为你锁心

我的工作的HttpClient POST方法。我需要创建的HttpClient 一次,应该使用保持活动连接。但我认为,在我的情况下,其建立新连接每次。

所以,我需要使用的保活的连接的HttpClient

下面是我的code片段的任何帮助将是AP preciated很多。

  ClientConnectionManager经理= httpclient_recv.getConnectionManager();
    马力= httpclient_recv.getParams();
    httpclient_recv =新DefaultHttpClient(
    新ThreadSafeClientConnManager(HP,mgr.getSchemeRegistry()),马力);

    而(真){

        尝试 {

            java.util.logging.Logger.getLogger(org.apache.http.wire)
                    .setLevel(java.util.logging.Level.FINER);
            java.util.logging.Logger.getLogger(org.apache.http.headers)
                    .setLevel(java.util.logging.Level.FINER);

            System.setProperty(org.apache.commons.logging.Log
                    org.apache.commons.logging.impl.SimpleLog);
            System.setProperty(
                    org.apache.commons.logging.simplelog.showdatetime
                    真正);
            System.setProperty(
                    org.apache.commons.logging.simplelog.log.httpclient.wire
                    调试);
            System.setProperty(
                    org.apache.commons.logging.simplelog.log.org.apache.http
                    调试);
            System.setProperty(
                    org.apache.commons.logging.simplelog.log.org.apache.http.headers
                    调试);

            ByteArrayEntity BAE =新ByteArrayEntity(byteData);
            bae.setContentType(新BasicHeader(HTTP.CONTENT_TYPE,
                    二进制/八位字节流));

            httppost_recv.setHeader(HTTP.CONN_DIRECTIVE,HTTP.CONN_KEEP_ALIVE);
            httppost_recv.setEntity(BAE);



            {
                的System.out.println(RES B4反应);
                 response_recv = httpclient_recv
                        .execute(httppost_recv);
                 。response_recv.getEntity()consumeContent();
                的System.out.println(RES A4反应);
                如果(response_recv!= NULL){
                    的字节数组= EntityUtils.toByteArray(response_recv
                            .getEntity());
                    播放= TRUE;
                }
                        }
                 }
 

和也的logcat日志是:

10月12日至三日:07:29.466:我/的System.out(1529):资源B4响应 10月12号至3日:07:29.646:D / org.apache.http.wire(1529):>> POST /平HTTP / 1.1 [EOL] 10月12号至3日:07:29.666:D / org.apache.http.wire(1529):>> 连接:保持活动[EOL] 10月12号至3日:07:29.686:D / org.apache.http.wire(1529):>> 内容长度:1 [EOL] 10月12号至3日:07:29.705:D / org.apache.http.wire(1529):>> 内容类型:二进制/八位字节流[EOL] 10月12号至3日:07:29.716:D / org.apache.http.wire(1529):>> 主持人:192.168.1.36 [EOL] 10月12号至3日:07:29.725:D / org.apache.http.wire(1529):>> 用户代理:Apache的HttpClient的/不可用(Java 1.4中)[EOL] 10月12号至3日:07:29.736:D / org.apache.http.wire(1529):>> [EOL] 10月12号至3日:07:29.746:D / org.apache.http.headers(1529):>> POST /平HTTP / 1.1 10月12号至3日:07:29.746:D / org.apache.http.headers(1529):>>连接:保持活动 10月12号至3日:07:29.756:D / org.apache.http.headers(1529):>>内容长度:1 10月12号至3日:07:29.756:D / org.apache.http.headers(1529):>>内容类型:二进制/八位字节流 10月12号至3日:07:29.765:D / org.apache.http.headers(1529):>>主持人:192.168.1.36 10月12号至3日:07:29.765:D / org.apache.http.headers(1529):>>用户代理:Apache的HttpClient的/不可用(Java 1.4中) 10月12号至3日:07:29.776:D / org.apache.http.wire(1529):>> [为0x0] 10月12号至3日:07:29.796:D / org.apache.http.wire(1529):其中;&其中; HTTP / 1.1 200 OK [EOL] 10月12号至3日:07:29.805:D / org.apache.http.wire(1529):其中;&其中; 服务器:gSOAP的/ 2.8 [EOL] 10月12号至3日:07:29.816:D / org.apache.http.wire(1529):其中;&其中; 内容类型:二进制/八位字节流[EOL] 10月12号至3日:07:29.826:D / org.apache.http.wire(1529):其中;&其中; 内容长度:2048 [EOL] 10月12号至3日:07:29.836:D / org.apache.http.wire(1529):其中;&其中; **连接:关闭[EOL]** 10月12号至3日:07:29.887:D / org.apache.http.headers(1529):其中;&其中; HTTP / 1.1 200 OK 10月12号至3日:07:29.896:D / org.apache.http.headers(1529):其中;&其中;服务器:gSOAP的/ 2.8 10月12号至3日:07:29.896:D / org.apache.http.headers(1529):其中;&其中;内容类型:二进制/八位字节流 10月12号至3日:07:29.906:D / org.apache.http.headers(1529):其中;&其中;内容长度:2048 10月12号至3日:07:29.906:D / org.apache.http.headers(1529):其中;&其中; **连接:关闭** 10月12号至3日:07:29.916:我/的System.out(1529):资源A4响应 浅谈httpClient使用总结

解决方案   

10:07:29.746:D / org.apache.http.headers(1529):>>连接:保持活动

您正在请求存活。

  

10:07:29.836:D / org.apache.http.wire(1529):其中;&其中; 连接:关闭[EOL]

服务器拒绝它。

没有什么,你可以在你到底做了一番。

I am working HttpClient POST method. I need to create HttpClient once and should use Keep Alive Connection. But I think in my case , its establishing a new connection every time.

So, i need to use a Keep Alive connection for HttpClient.

Here is my code snippet any help would be appreciated lot.

ClientConnectionManager mgr = httpclient_recv.getConnectionManager();
    hp = httpclient_recv.getParams();
    httpclient_recv = new DefaultHttpClient(
    new ThreadSafeClientConnManager(hp,mgr.getSchemeRegistry()), hp);

    while (true) {

        try {

            java.util.logging.Logger.getLogger("org.apache.http.wire")
                    .setLevel(java.util.logging.Level.FINER);
            java.util.logging.Logger.getLogger("org.apache.http.headers")
                    .setLevel(java.util.logging.Level.FINER);

            System.setProperty("org.apache.commons.logging.Log",
                    "org.apache.commons.logging.impl.SimpleLog");
            System.setProperty(
                    "org.apache.commons.logging.simplelog.showdatetime",
                    "true");
            System.setProperty(
                    "org.apache.commons.logging.simplelog.log.httpclient.wire",
                    "debug");
            System.setProperty(
                    "org.apache.commons.logging.simplelog.log.org.apache.http",
                    "debug");
            System.setProperty(
                    "org.apache.commons.logging.simplelog.log.org.apache.http.headers",
                    "debug");

            ByteArrayEntity bae = new ByteArrayEntity(byteData);
            bae.setContentType(new BasicHeader(HTTP.CONTENT_TYPE,
                    "binary/octet-stream"));

            httppost_recv.setHeader(HTTP.CONN_DIRECTIVE,HTTP.CONN_KEEP_ALIVE);
            httppost_recv.setEntity(bae);



            {
                System.out.println("res b4 response");
                 response_recv = httpclient_recv
                        .execute(httppost_recv);
                 response_recv.getEntity().consumeContent();
                System.out.println("res a4 response");
                if (response_recv != null) {
                    byteArray = EntityUtils.toByteArray(response_recv
                            .getEntity());
                    playing  = true;
                }
                        }
                 }

and also logcat logs is:

12-03 10:07:29.466: I/System.out(1529): res b4 response
12-03 10:07:29.646: D/org.apache.http.wire(1529): >> "POST /ping HTTP/1.1[EOL]"
12-03 10:07:29.666: D/org.apache.http.wire(1529): >> "Connection: Keep-Alive[EOL]"
12-03 10:07:29.686: D/org.apache.http.wire(1529): >> "Content-Length: 1[EOL]"
12-03 10:07:29.705: D/org.apache.http.wire(1529): >> "Content-Type: binary/octet-stream[EOL]"
12-03 10:07:29.716: D/org.apache.http.wire(1529): >> "Host: 192.168.1.36[EOL]"
12-03 10:07:29.725: D/org.apache.http.wire(1529): >> "User-Agent: Apache-HttpClient/UNAVAILABLE (java 1.4)[EOL]"
12-03 10:07:29.736: D/org.apache.http.wire(1529): >> "[EOL]"
12-03 10:07:29.746: D/org.apache.http.headers(1529): >> POST /ping HTTP/1.1
12-03 10:07:29.746: D/org.apache.http.headers(1529): >> Connection: Keep-Alive
12-03 10:07:29.756: D/org.apache.http.headers(1529): >> Content-Length: 1
12-03 10:07:29.756: D/org.apache.http.headers(1529): >> Content-Type: binary/octet-stream
12-03 10:07:29.765: D/org.apache.http.headers(1529): >> Host: 192.168.1.36
12-03 10:07:29.765: D/org.apache.http.headers(1529): >> User-Agent: Apache-HttpClient/UNAVAILABLE (java 1.4)
12-03 10:07:29.776: D/org.apache.http.wire(1529): >> "[0x0]"
12-03 10:07:29.796: D/org.apache.http.wire(1529): << "HTTP/1.1 200 OK[EOL]"
12-03 10:07:29.805: D/org.apache.http.wire(1529): << "Server: gSOAP/2.8[EOL]"
12-03 10:07:29.816: D/org.apache.http.wire(1529): << "Content-Type: binary/octet-stream[EOL]"
12-03 10:07:29.826: D/org.apache.http.wire(1529): << "Content-Length: 2048[EOL]"
12-03 10:07:29.836: D/org.apache.http.wire(1529): << **"Connection: close[EOL]"**
12-03 10:07:29.887: D/org.apache.http.headers(1529): << HTTP/1.1 200 OK
12-03 10:07:29.896: D/org.apache.http.headers(1529): << Server: gSOAP/2.8
12-03 10:07:29.896: D/org.apache.http.headers(1529): << Content-Type: binary/octet-stream
12-03 10:07:29.906: D/org.apache.http.headers(1529): << Content-Length: 2048
12-03 10:07:29.906: D/org.apache.http.headers(1529): << **Connection: close**
12-03 10:07:29.916: I/System.out(1529): res a4 response

解决方案

10:07:29.746: D/org.apache.http.headers(1529): >> Connection: Keep-Alive

You are requesting keepalive.

10:07:29.836: D/org.apache.http.wire(1529): << "Connection: close[EOL]"

The server is refusing it.

Nothing you can do about that at your end.