tomcat-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Christopher Schultz <ch...@christopherschultz.net>
Subject Re: How to write a correct HTTP request to Tomcat 8.5.4 instance?
Date Tue, 06 Sep 2016 17:40:29 GMT
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA256

Terrence,

On 9/6/16 10:00 AM, Terence M. Bandoian wrote:
> On 9/5/2016 8:09 AM, Klemens Muthmann wrote:
>> Am 05.09.2016 um 14:49 schrieb Tim Watts:
>>> On Mon, 2016-09-05 at 14:11 +0200, Klemens Muthmann wrote:
>>>> Hi,
>>>> 
>>>> I currently need to implement an HTTP data transmission from
>>>> an Arduino with WiFi module to a PC running a Tomcat 8.5.4
>>>> instance. The Tomcat is running under Ubuntu 16.04.
>>>> 
>>>> The problem is that, since there are no HTTP libraries on
>>>> Arduino, I need to write the correct HTTP request myself and
>>>> I got stuck. It would be great if someone on the list with a
>>>> deeper understanding of the HTTP protocol would be willing to
>>>> support me. The transmitted (possibly erroneous ) request
>>>> looks like:
>>>> 
>>>> ======================================== GET
>>>> /push?VIN=testrun HTTP/1.1 User-Agent: Freematics Connection:
>>>> keep-alive Host:
>>>> 
>>>> ======================================== The server runs
>>>> under a local access point IP (10.42.0.1) and receives that
>>>> request correctly but throws me an EOFException from the
>>>> following code fragment:
>>>> 
>>>> nRead = channel.read(socketBufferHandler.getReadBuffer()); if
>>>> (nRead == -1) { throw new EOFException(); }
>>>> 
>>>> So it seems to me that an end of file is reached before it is
>>>> expected. Can somebody provide me with hints on how to solve
>>>> that issue and formulate a correct HTTP request to my Tomcat
>>>> instance?
>>>> 
>>>> The following is th log trace I receive from the server: 
>>>> ======================================== 2016-09-05
>>>> 13:32:50.238 DEBUG 13143 --- [nio-8080-exec-1] 
>>>> o.a.coyote.http11.Http11InputBuffer      : Received [GET 
>>>> /push?VIN=testrun HTTP/1.1 User-Agent: Freematics Connection:
>>>> keep-alive Host:
>>>> 
>>>> ]
>>> Until a real expert comes along with a better answer let me
>>> just toss this out:  Are the lines in the HTTP request that the
>>> Arduino submits terminated with \r\n (and not just \n)?
>>> Because it looks like the entire request may have been read
>>> when reading the request line.  Then when it goes to read the
>>> headers it gets an EOF.  Not 100% sure of this but it's
>>> possible.
>>> 
>>> 
>>>> 2016-09-05 13:32:50.238 DEBUG 13143 --- [nio-8080-exec-1] 
>>>> o.a.c.authenticator.AuthenticatorBase    : Security checking
>>>> request GET /push 2016-09-05 13:32:50.238 DEBUG 13143 ---
>>>> [nio-8080-exec-1] org.apache.catalina.realm.RealmBase      :
>>>> No applicable constraints defined 2016-09-05 13:32:50.238
>>>> DEBUG 13143 --- [nio-8080-exec-1] 
>>>> o.a.c.authenticator.AuthenticatorBase    :  Not subject to
>>>> any constraint 2016-09-05 13:32:50.238 DEBUG 13143 ---
>>>> [nio-8080-exec-1] org.apache.tomcat.util.http.Parameters   :
>>>> Set encoding to UTF-8 2016-09-05 13:32:50.238 DEBUG 13143 ---
>>>> [nio-8080-exec-1] org.apache.tomcat.util.http.Parameters   :
>>>> Decoding query null UTF-8 2016-09-05 13:32:50.238 DEBUG 13143
>>>> --- [nio-8080-exec-1] org.apache.tomcat.util.http.Parameters
>>>> : Start processing with input [VIN=testrun] 2016-09-05
>>>> 13:32:50.238 DEBUG 13143 --- [nio-8080-exec-1] 
>>>> o.s.b.w.f.OrderedRequestContextFilter    : Bound request
>>>> context to thread:
>>>> org.apache.catalina.connector.RequestFacade@75c83bc4 
>>>> 2016-09-05 13:32:50.238 DEBUG 13143 --- [nio-8080-exec-1] 
>>>> o.s.web.servlet.DispatcherServlet        : DispatcherServlet
>>>> with name 'dispatcherServlet' processing GET request for
>>>> [/push] 2016-09-05 13:32:50.238 DEBUG 13143 ---
>>>> [nio-8080-exec-1] s.w.s.m.m.a.RequestMappingHandlerMapping :
>>>> Looking up handler method for path /push 2016-09-05
>>>> 13:32:50.238 DEBUG 13143 --- [nio-8080-exec-1] 
>>>> s.w.s.m.m.a.RequestMappingHandlerMapping : Returning handler
>>>> method [public void
>>>> de.cyface.obd2.controller.Obd2Controller.push()] 2016-09-05
>>>> 13:32:50.238 DEBUG 13143 --- [nio-8080-exec-1] 
>>>> o.s.b.f.s.DefaultListableBeanFactory     : Returning cached
>>>> instance of singleton bean 'obd2Controller' 2016-09-05
>>>> 13:32:50.238 DEBUG 13143 --- [nio-8080-exec-1] 
>>>> o.s.web.servlet.DispatcherServlet        : Last-Modified
>>>> value for [/push] is: -1 push 2016-09-05 13:32:50.239 DEBUG
>>>> 13143 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet
>>>> : Null ModelAndView returned to DispatcherServlet with name
>>>> 'dispatcherServlet': assuming HandlerAdapter completed
>>>> request handling 2016-09-05 13:32:50.239 DEBUG 13143 ---
>>>> [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet        :
>>>> Successfully completed request 2016-09-05 13:32:50.239 DEBUG
>>>> 13143 --- [nio-8080-exec-1] 
>>>> o.s.b.w.f.OrderedRequestContextFilter    : Cleared
>>>> thread-bound request context:
>>>> org.apache.catalina.connector.RequestFacade@75c83bc4 
>>>> 2016-09-05 13:32:50.239 DEBUG 13143 --- [nio-8080-exec-1] 
>>>> o.apache.coyote.http11.Http11Processor   : Socket: 
>>>> [org.apache.tomcat.util.net.NioEndpoint$NioSocketWrapper@2940dec1:o
rg.apache.tomcat.util.net.NioChannel@34a92297:java.nio.channels.SocketCh
annel[connected
>>>>
>>>>
>>>> 
local=/10.42.0.1:8080 remote=/10.42.0.72:46701]], Status in:
>>>> [OPEN_READ], State out: [OPEN] 2016-09-05 13:32:55.280 DEBUG
>>>> 13143 --- [nio-8080-exec-2] 
>>>> o.apache.coyote.http11.Http11Processor   : Error parsing
>>>> HTTP request header
>>>> 
>>>> java.io.EOFException: null at 
>>>> org.apache.tomcat.util.net.NioEndpoint$NioSocketWrapper.fillReadBuf
fer(NioEndpoint.java:1222)
>>>>
>>>>
>>>> 
~[tomcat-embed-core-8.5.4.jar:8.5.4]
>>>> at 
>>>> org.apache.tomcat.util.net.NioEndpoint$NioSocketWrapper.read(NioEnd
point.java:1163)
>>>>
>>>>
>>>> 
~[tomcat-embed-core-8.5.4.jar:8.5.4]
>>>> at 
>>>> org.apache.coyote.http11.Http11InputBuffer.fill(Http11InputBuffer.j
ava:742)
>>>>
>>>>
>>>> 
~[tomcat-embed-core-8.5.4.jar:8.5.4]
>>>> at 
>>>> org.apache.coyote.http11.Http11InputBuffer.parseRequestLine(Http11I
nputBuffer.java:404)
>>>>
>>>>
>>>> 
~[tomcat-embed-core-8.5.4.jar:8.5.4]
>>>> at 
>>>> org.apache.coyote.http11.Http11Processor.service(Http11Processor.ja
va:994)
>>>>
>>>>
>>>> 
~[tomcat-embed-core-8.5.4.jar:8.5.4]
>>>> at 
>>>> org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorL
ight.java:66)
>>>>
>>>>
>>>> 
[tomcat-embed-core-8.5.4.jar:8.5.4]
>>>> at 
>>>> org.apache.coyote.AbstractProtocol$ConnectionHandler.process(Abstra
ctProtocol.java:785)
>>>>
>>>>
>>>> 
[tomcat-embed-core-8.5.4.jar:8.5.4]
>>>> at 
>>>> org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEnd
point.java:1425)
>>>>
>>>>
>>>> 
[tomcat-embed-core-8.5.4.jar:8.5.4]
>>>> at 
>>>> org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorB
ase.java:49)
>>>>
>>>>
>>>> 
[tomcat-embed-core-8.5.4.jar:8.5.4]
>>>> at 
>>>> java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecuto
r.java:1142)
>>>>
>>>>
>>>> 
[na:1.8.0_91]
>>>> at 
>>>> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecut
or.java:617)
>>>>
>>>>
>>>> 
[na:1.8.0_91]
>>>> at 
>>>> org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(Task
Thread.java:61)
>>>>
>>>>
>>>> 
[tomcat-embed-core-8.5.4.jar:8.5.4]
>>>> at java.lang.Thread.run(Thread.java:745) [na:1.8.0_91] 
>>>> =======================================
>>>> 
>>>> Thanks and regards Klemens
>>>> 
>>> 
>>> --------------------------------------------------------------------
- -
>>>
>>> 
To unsubscribe, e-mail: users-unsubscribe@tomcat.apache.org
>>> For additional commands, e-mail: users-help@tomcat.apache.org
>>> 
>> Hi,
>> 
>> Thanks for the answer.
>> 
>> The request is formatted on the Arduino like: "GET
>> /push?VIN=testrun HTTP/1.1\r\nUser-Agent:
>> Freematics\r\nConnection: keep-alive\r\nHost: \r\n"
>> 
>> So yes, all lines are terminated with \r\n
>> 
>> Regards Klemens
> 
> 
> Is an additional CRLF expected?  From RFC 2616:
> 
> generic-message = start-line *(message-header CRLF) CRLF [
> message-body ] start-line      = Request-Line | Status-Line

Yup, a valid HTTP/1.1 request must end with CR LF CR LF.

Klemens, try adding *another * CR LF pair to your request to see if
that improves things.

- -chris
-----BEGIN PGP SIGNATURE-----
Comment: GPGTools - http://gpgtools.org
Comment: Using GnuPG with Thunderbird - http://www.enigmail.net/

iQIcBAEBCAAGBQJXzv+NAAoJEBzwKT+lPKRYsrwP/3fRwVuhgQRBw6uMiEKBYs6c
nTbpNfUkSI6jeVlyLfeCdHCMOg5zcxPq3yeIn6ulpNYhsWaM/nURSq4DuHu7HXSt
Rt8Z7yQArbtKfdQUZsjSp3ZPF3FuUBL9d0/G+y+xgKkCsEvaPH3ib3Z1aUAROnmH
ZVB//hqHPcpvgwgyxMAxl8mA29jsZ3D/cLT6N50nRY1y9v09tRTXMBO+Mkw8cxL7
WWkucd+NzkCF4pf5zY64UEMoNuodexa7Qi96dZLcArH4GuSosFZtxaVBnOdqZ2EF
llWVuSdnW5QxaPtI4vEkr96Z9zSfnptYAlnRBK35uprKdivUo3HitWHInGKX42kA
PmLm+hhVABAHPYZ2XCdevP+VkBlIsfv7mNeNW17jY+FFvM+iVCPxgNIh3z6EXHI0
6hGCCz6SxtHJ6dSruWxzC2NwDxVA1OGpDICeoTir5RylRk/h3ZJpWp/w3+aeHQnN
zn1ENZaFITjRmNwNgbLYZk1VCTALerkf3egR3Y8L6WxRjjzOKsm3H1tIBRF9SGmr
/OHJ3s8cXjhlr7+ojlWb4yBad79vR1CQEe5+uynP5nOLbogBHVIfBW8soVUD2IrX
SP8QZRTnqV1l5IXXtwukzmr8WCeP1pRSU6aszjYY+KCGOIH1ZOH22OwFR1qzVxlV
5kby5r2TSZWg2HIxDjBt
=ylEK
-----END PGP SIGNATURE-----

---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@tomcat.apache.org
For additional commands, e-mail: users-help@tomcat.apache.org


Mime
View raw message