ClientProtocolException from invalid HTTP version
Brought to you by:
henryju
Sometimes trying to call submit() will lead to a ClientProtocolException due to an invalid HTTP header:
java.lang.RuntimeException: org.apache.http.client.ClientProtocolException
at com.gargoylesoftware.htmlunit.WebClient.download(WebClient.java:2233)
at com.gargoylesoftware.htmlunit.html.HtmlForm.submit(HtmlForm.java:140)
at com.gargoylesoftware.htmlunit.html.HtmlSubmitInput.doClickStateUpdate(HtmlSubmitInput.java:70)
at com.gargoylesoftware.htmlunit.html.HtmlElement.click(HtmlElement.java:1234)
at com.gargoylesoftware.htmlunit.html.HtmlElement.click(HtmlElement.java:1182)
at com.gargoylesoftware.htmlunit.html.HtmlElement.click(HtmlElement.java:1145)
at net.sourceforge.jwebunit.htmlunit.HtmlUnitTestingEngineImpl.submit(HtmlUnitTestingEngineImpl.java:1525)
at net.sourceforge.jwebunit.junit.WebTester.submit(WebTester.java:2535)
at net.sourceforge.jwebunit.junit.JWebUnit.submit(JWebUnit.java:1980)
This seems to be caused by code trying to parse the HTTP version number seeing HTTP/1.1HTTP/1.1 200 OK:
Caused by: org.apache.http.ProtocolException: Invalid protocol minor version number: HTTP/1.1HTTP/1.1 200 OK
at org.apache.http.impl.io.AbstractMessageParser.parse(AbstractMessageParser.java:256)
at org.apache.http.impl.AbstractHttpClientConnection.receiveResponseHeader(AbstractHttpClientConnection.java:289)
at org.apache.http.impl.conn.DefaultClientConnection.receiveResponseHeader(DefaultClientConnection.java:252)
at org.apache.http.impl.conn.ManagedClientConnectionImpl.receiveResponseHeader(ManagedClientConnectionImpl.java:191)
at org.apache.http.protocol.HttpRequestExecutor.doReceiveResponse(HttpRequestExecutor.java:300)
at org.apache.http.protocol.HttpRequestExecutor.execute(HttpRequestExecutor.java:127)
at org.apache.http.impl.client.DefaultRequestDirector.tryExecute(DefaultRequestDirector.java:712)
at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:517)
at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:906)
... 36 more
Caused by: org.apache.http.ParseException: Invalid protocol minor version number: HTTP/1.1HTTP/1.1 200 OK
at org.apache.http.message.BasicLineParser.parseProtocolVersion(BasicLineParser.java:189)
at org.apache.http.message.BasicLineParser.parseStatusLine(BasicLineParser.java:402)
at org.apache.http.impl.conn.DefaultHttpResponseParser.parseHead(DefaultHttpResponseParser.java:112)
at org.apache.http.impl.conn.DefaultHttpResponseParser.parseHead(DefaultHttpResponseParser.java:62)
at org.apache.http.impl.io.AbstractMessageParser.parse(AbstractMessageParser.java:254)
... 44 more
I've seen this bug happen on URLs for which curl reports normal responses. I've seen it happen for HTTP 200s as well as other status codes.