You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@hc.apache.org by "Michael Andersen (JIRA)" <ji...@apache.org> on 2008/09/09 13:33:44 UTC

[jira] Created: (HTTPCLIENT-795) If there is more than 15 seconds between HttpClient.execute() calls using a MultipartEntity, a ProtocolException is thrown complaining about the Content-Length header already being present.

If there is more than 15 seconds between HttpClient.execute() calls using a MultipartEntity, a ProtocolException is thrown complaining about the Content-Length header already being present.
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

                 Key: HTTPCLIENT-795
                 URL: https://issues.apache.org/jira/browse/HTTPCLIENT-795
             Project: HttpComponents HttpClient
          Issue Type: Bug
          Components: HttpClient
    Affects Versions: 4.0 Alpha 4
         Environment: Linux, java version "1.6.0_06" Java(TM) SE Runtime Environment (build 1.6.0_06-b02) Java HotSpot(TM) Client VM (build 10.0-b22, mixed mode). Also using HttpCore-4.0-beta2
            Reporter: Michael Andersen


I am not sure if this time-related behaviour is intentional or not (I have only been using this library for a few weeks) , but even if a timeout is to be expected, the exception thrown ought to indicate that there is a time component involved. "org.apache.http.ProtocolException: Content-Length header already present" is incredibly misleading. 

A simple-ish compileable program to reproduce the bug is as follows:

import java.nio.charset.Charset;
import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.params.ClientPNames;
import org.apache.http.client.params.CookiePolicy;
import org.apache.http.entity.mime.MultipartEntity;
import org.apache.http.entity.mime.content.StringBody;
import org.apache.http.impl.client.DefaultHttpClient;
public class Simple {
    static public void main(String [] args)
    {
        try
        {
            DefaultHttpClient client = new DefaultHttpClient();
            client.getParams().setParameter(
                        ClientPNames.COOKIE_POLICY, CookiePolicy.BROWSER_COMPATIBILITY);
            MultipartEntity entity;
            StringBody stringBody;
            HttpPost post;
            HttpResponse response;
            entity = new MultipartEntity();
            stringBody = new StringBody("field contents",Charset.forName("ISO-8859-1"));
            entity.addPart("field", stringBody);  
            post = new HttpPost("http://localhost/simple.php");
            post.setEntity(entity); 
            response = client.execute(post);
            
            //The exception does not occur if the content is not consumed
            response.getEntity().consumeContent();
            System.out.println("First post done");
            
            //The exception does not occur if the time interval between the requests is too short
            Thread.sleep(15000);
            
            //The exception naturally doesn't occur if a new HttpClient is created
            //client = new DefaultHttpClient();

            entity = new MultipartEntity();
            stringBody = new StringBody("field contents",Charset.forName("ISO-8859-1"));
            entity.addPart("field", stringBody);  

            post = new HttpPost("http://localhost/simple.php");
            post.setEntity(entity); 
            response = client.execute(post); //Will throw the following:
            /*
                org.apache.http.ProtocolException: Content-Length header already present
                at org.apache.http.protocol.RequestContent.process(RequestContent.java:70)
                at org.apache.http.protocol.BasicHttpProcessor.process(BasicHttpProcessor.java:290)
                at org.apache.http.protocol.HttpRequestExecutor.preProcess(HttpRequestExecutor.java:160)
                at org.apache.http.impl.client.DefaultClientRequestDirector.execute(DefaultClientRequestDirector.java:356)
                at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:501)
                at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:456)
                at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:422)
                at test.Simple.main(Simple.java:57)
             */ 
            System.out.println("Second post done");
        }
        catch(Exception e)
        {
            System.out.println(e);
            e.printStackTrace();
        }
    }    
}

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@hc.apache.org
For additional commands, e-mail: dev-help@hc.apache.org


[jira] Commented: (HTTPCLIENT-795) If there is more than 15 seconds between HttpClient.execute() calls using a MultipartEntity, a ProtocolException is thrown complaining about the Content-Length header already being present.

Posted by "Oleg Kalnichevski (JIRA)" <ji...@apache.org>.
    [ https://issues.apache.org/jira/browse/HTTPCLIENT-795?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12629465#action_12629465 ] 

Oleg Kalnichevski commented on HTTPCLIENT-795:
----------------------------------------------

Michael, could you please re-test against HttpClient 4.0-beta1 and see if the problem still persists?

Oleg

> If there is more than 15 seconds between HttpClient.execute() calls using a MultipartEntity, a ProtocolException is thrown complaining about the Content-Length header already being present.
> ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
>
>                 Key: HTTPCLIENT-795
>                 URL: https://issues.apache.org/jira/browse/HTTPCLIENT-795
>             Project: HttpComponents HttpClient
>          Issue Type: Bug
>          Components: HttpClient
>    Affects Versions: 4.0 Alpha 4
>         Environment: Linux, java version "1.6.0_06" Java(TM) SE Runtime Environment (build 1.6.0_06-b02) Java HotSpot(TM) Client VM (build 10.0-b22, mixed mode). Also using HttpCore-4.0-beta2
>            Reporter: Michael Andersen
>
> I am not sure if this time-related behaviour is intentional or not (I have only been using this library for a few weeks) , but even if a timeout is to be expected, the exception thrown ought to indicate that there is a time component involved. "org.apache.http.ProtocolException: Content-Length header already present" is incredibly misleading. 
> A simple-ish compileable program to reproduce the bug is as follows:
> import java.nio.charset.Charset;
> import org.apache.http.HttpResponse;
> import org.apache.http.client.methods.HttpPost;
> import org.apache.http.client.params.ClientPNames;
> import org.apache.http.client.params.CookiePolicy;
> import org.apache.http.entity.mime.MultipartEntity;
> import org.apache.http.entity.mime.content.StringBody;
> import org.apache.http.impl.client.DefaultHttpClient;
> public class Simple {
>     static public void main(String [] args)
>     {
>         try
>         {
>             DefaultHttpClient client = new DefaultHttpClient();
>             client.getParams().setParameter(
>                         ClientPNames.COOKIE_POLICY, CookiePolicy.BROWSER_COMPATIBILITY);
>             MultipartEntity entity;
>             StringBody stringBody;
>             HttpPost post;
>             HttpResponse response;
>             entity = new MultipartEntity();
>             stringBody = new StringBody("field contents",Charset.forName("ISO-8859-1"));
>             entity.addPart("field", stringBody);  
>             post = new HttpPost("http://localhost/simple.php");
>             post.setEntity(entity); 
>             response = client.execute(post);
>             
>             //The exception does not occur if the content is not consumed
>             response.getEntity().consumeContent();
>             System.out.println("First post done");
>             
>             //The exception does not occur if the time interval between the requests is too short
>             Thread.sleep(15000);
>             
>             //The exception naturally doesn't occur if a new HttpClient is created
>             //client = new DefaultHttpClient();
>             entity = new MultipartEntity();
>             stringBody = new StringBody("field contents",Charset.forName("ISO-8859-1"));
>             entity.addPart("field", stringBody);  
>             post = new HttpPost("http://localhost/simple.php");
>             post.setEntity(entity); 
>             response = client.execute(post); //Will throw the following:
>             /*
>                 org.apache.http.ProtocolException: Content-Length header already present
>                 at org.apache.http.protocol.RequestContent.process(RequestContent.java:70)
>                 at org.apache.http.protocol.BasicHttpProcessor.process(BasicHttpProcessor.java:290)
>                 at org.apache.http.protocol.HttpRequestExecutor.preProcess(HttpRequestExecutor.java:160)
>                 at org.apache.http.impl.client.DefaultClientRequestDirector.execute(DefaultClientRequestDirector.java:356)
>                 at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:501)
>                 at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:456)
>                 at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:422)
>                 at test.Simple.main(Simple.java:57)
>              */ 
>             System.out.println("Second post done");
>         }
>         catch(Exception e)
>         {
>             System.out.println(e);
>             e.printStackTrace();
>         }
>     }    
> }

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@hc.apache.org
For additional commands, e-mail: dev-help@hc.apache.org


[jira] Commented: (HTTPCLIENT-795) If there is more than 15 seconds between HttpClient.execute() calls using a MultipartEntity, a ProtocolException is thrown complaining about the Content-Length header already being present.

Posted by "Michael Andersen (JIRA)" <ji...@apache.org>.
    [ https://issues.apache.org/jira/browse/HTTPCLIENT-795?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12629467#action_12629467 ] 

Michael Andersen commented on HTTPCLIENT-795:
---------------------------------------------

Aah. Sorry, should have done that first. The problem appears resolved. 

Thanks
Michael

> If there is more than 15 seconds between HttpClient.execute() calls using a MultipartEntity, a ProtocolException is thrown complaining about the Content-Length header already being present.
> ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
>
>                 Key: HTTPCLIENT-795
>                 URL: https://issues.apache.org/jira/browse/HTTPCLIENT-795
>             Project: HttpComponents HttpClient
>          Issue Type: Bug
>          Components: HttpClient
>    Affects Versions: 4.0 Alpha 4
>         Environment: Linux, java version "1.6.0_06" Java(TM) SE Runtime Environment (build 1.6.0_06-b02) Java HotSpot(TM) Client VM (build 10.0-b22, mixed mode). Also using HttpCore-4.0-beta2
>            Reporter: Michael Andersen
>             Fix For: 4.0 Beta 1
>
>
> I am not sure if this time-related behaviour is intentional or not (I have only been using this library for a few weeks) , but even if a timeout is to be expected, the exception thrown ought to indicate that there is a time component involved. "org.apache.http.ProtocolException: Content-Length header already present" is incredibly misleading. 
> A simple-ish compileable program to reproduce the bug is as follows:
> import java.nio.charset.Charset;
> import org.apache.http.HttpResponse;
> import org.apache.http.client.methods.HttpPost;
> import org.apache.http.client.params.ClientPNames;
> import org.apache.http.client.params.CookiePolicy;
> import org.apache.http.entity.mime.MultipartEntity;
> import org.apache.http.entity.mime.content.StringBody;
> import org.apache.http.impl.client.DefaultHttpClient;
> public class Simple {
>     static public void main(String [] args)
>     {
>         try
>         {
>             DefaultHttpClient client = new DefaultHttpClient();
>             client.getParams().setParameter(
>                         ClientPNames.COOKIE_POLICY, CookiePolicy.BROWSER_COMPATIBILITY);
>             MultipartEntity entity;
>             StringBody stringBody;
>             HttpPost post;
>             HttpResponse response;
>             entity = new MultipartEntity();
>             stringBody = new StringBody("field contents",Charset.forName("ISO-8859-1"));
>             entity.addPart("field", stringBody);  
>             post = new HttpPost("http://localhost/simple.php");
>             post.setEntity(entity); 
>             response = client.execute(post);
>             
>             //The exception does not occur if the content is not consumed
>             response.getEntity().consumeContent();
>             System.out.println("First post done");
>             
>             //The exception does not occur if the time interval between the requests is too short
>             Thread.sleep(15000);
>             
>             //The exception naturally doesn't occur if a new HttpClient is created
>             //client = new DefaultHttpClient();
>             entity = new MultipartEntity();
>             stringBody = new StringBody("field contents",Charset.forName("ISO-8859-1"));
>             entity.addPart("field", stringBody);  
>             post = new HttpPost("http://localhost/simple.php");
>             post.setEntity(entity); 
>             response = client.execute(post); //Will throw the following:
>             /*
>                 org.apache.http.ProtocolException: Content-Length header already present
>                 at org.apache.http.protocol.RequestContent.process(RequestContent.java:70)
>                 at org.apache.http.protocol.BasicHttpProcessor.process(BasicHttpProcessor.java:290)
>                 at org.apache.http.protocol.HttpRequestExecutor.preProcess(HttpRequestExecutor.java:160)
>                 at org.apache.http.impl.client.DefaultClientRequestDirector.execute(DefaultClientRequestDirector.java:356)
>                 at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:501)
>                 at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:456)
>                 at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:422)
>                 at test.Simple.main(Simple.java:57)
>              */ 
>             System.out.println("Second post done");
>         }
>         catch(Exception e)
>         {
>             System.out.println(e);
>             e.printStackTrace();
>         }
>     }    
> }

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@hc.apache.org
For additional commands, e-mail: dev-help@hc.apache.org


[jira] Closed: (HTTPCLIENT-795) If there is more than 15 seconds between HttpClient.execute() calls using a MultipartEntity, a ProtocolException is thrown complaining about the Content-Length header already being present.

Posted by "Michael Andersen (JIRA)" <ji...@apache.org>.
     [ https://issues.apache.org/jira/browse/HTTPCLIENT-795?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Michael Andersen closed HTTPCLIENT-795.
---------------------------------------

       Resolution: Fixed
    Fix Version/s: 4.0 Beta 1

The issue described was resolved in version 4.0 Beta 1

> If there is more than 15 seconds between HttpClient.execute() calls using a MultipartEntity, a ProtocolException is thrown complaining about the Content-Length header already being present.
> ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
>
>                 Key: HTTPCLIENT-795
>                 URL: https://issues.apache.org/jira/browse/HTTPCLIENT-795
>             Project: HttpComponents HttpClient
>          Issue Type: Bug
>          Components: HttpClient
>    Affects Versions: 4.0 Alpha 4
>         Environment: Linux, java version "1.6.0_06" Java(TM) SE Runtime Environment (build 1.6.0_06-b02) Java HotSpot(TM) Client VM (build 10.0-b22, mixed mode). Also using HttpCore-4.0-beta2
>            Reporter: Michael Andersen
>             Fix For: 4.0 Beta 1
>
>
> I am not sure if this time-related behaviour is intentional or not (I have only been using this library for a few weeks) , but even if a timeout is to be expected, the exception thrown ought to indicate that there is a time component involved. "org.apache.http.ProtocolException: Content-Length header already present" is incredibly misleading. 
> A simple-ish compileable program to reproduce the bug is as follows:
> import java.nio.charset.Charset;
> import org.apache.http.HttpResponse;
> import org.apache.http.client.methods.HttpPost;
> import org.apache.http.client.params.ClientPNames;
> import org.apache.http.client.params.CookiePolicy;
> import org.apache.http.entity.mime.MultipartEntity;
> import org.apache.http.entity.mime.content.StringBody;
> import org.apache.http.impl.client.DefaultHttpClient;
> public class Simple {
>     static public void main(String [] args)
>     {
>         try
>         {
>             DefaultHttpClient client = new DefaultHttpClient();
>             client.getParams().setParameter(
>                         ClientPNames.COOKIE_POLICY, CookiePolicy.BROWSER_COMPATIBILITY);
>             MultipartEntity entity;
>             StringBody stringBody;
>             HttpPost post;
>             HttpResponse response;
>             entity = new MultipartEntity();
>             stringBody = new StringBody("field contents",Charset.forName("ISO-8859-1"));
>             entity.addPart("field", stringBody);  
>             post = new HttpPost("http://localhost/simple.php");
>             post.setEntity(entity); 
>             response = client.execute(post);
>             
>             //The exception does not occur if the content is not consumed
>             response.getEntity().consumeContent();
>             System.out.println("First post done");
>             
>             //The exception does not occur if the time interval between the requests is too short
>             Thread.sleep(15000);
>             
>             //The exception naturally doesn't occur if a new HttpClient is created
>             //client = new DefaultHttpClient();
>             entity = new MultipartEntity();
>             stringBody = new StringBody("field contents",Charset.forName("ISO-8859-1"));
>             entity.addPart("field", stringBody);  
>             post = new HttpPost("http://localhost/simple.php");
>             post.setEntity(entity); 
>             response = client.execute(post); //Will throw the following:
>             /*
>                 org.apache.http.ProtocolException: Content-Length header already present
>                 at org.apache.http.protocol.RequestContent.process(RequestContent.java:70)
>                 at org.apache.http.protocol.BasicHttpProcessor.process(BasicHttpProcessor.java:290)
>                 at org.apache.http.protocol.HttpRequestExecutor.preProcess(HttpRequestExecutor.java:160)
>                 at org.apache.http.impl.client.DefaultClientRequestDirector.execute(DefaultClientRequestDirector.java:356)
>                 at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:501)
>                 at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:456)
>                 at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:422)
>                 at test.Simple.main(Simple.java:57)
>              */ 
>             System.out.println("Second post done");
>         }
>         catch(Exception e)
>         {
>             System.out.println(e);
>             e.printStackTrace();
>         }
>     }    
> }

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@hc.apache.org
For additional commands, e-mail: dev-help@hc.apache.org