On 2020-11-19 15:12:39 +0000, Shelke, Bhushan wrote: > I have a Tomcat+Java based server exposing REST APIs. I am writing a > client in python to consume those APIs. Everything is fine until I > send empty body in POST request. It is a valid use case for us. If I > send empty body I get 400 bad request error - Invalid character found > in method name [{}POST]. HTTP method names must be tokens. > > If I send empty request from POSTMAN or Java or CURL it works fine, > problem is only when I used python as a client. > > Following is python snippet - > > json_object={} > > header = {'alias': 'A', 'Content-Type' : 'application/json', 'Content-Length' > : '0'}
'Content-Length' : '0' is wrong, but it seems that requests.post overrides that, so it doesn't matter. > resp = requests.post(url, auth=(username, password), headers=header, > json=json_object) > > > > I tried using data as well instead of json param to send payload with > not much of success. > > I captured the wireshark dumps to understand it further and found that > the request tomcat received is not as per RFC2616 > (https://www.w3.org/Protocols/rfc2616/rfc2616-sec5.html). Especially > the part - > > Request-Line = Method SP Request-URI SP HTTP-Version CRLF > > I could see in from wireshark dumps it looked like - {}POST > <MY-APP-URI> HTTP/1.1 > > As we can see the empty body is getting prefixed with http-method, > hence tomcat reports that as an error. I then looked at python http > library code - client.py. I cannot reproduce this. Using Python 3.8.2 and requests 2.22.0 (as included in Ubuntu 20.04), the request sent is "POST /env HTTP/1.1", not "{}POST /env HTTP/1.1", In wireshark "Follow TCP connection", the "{}" at the end of the request is squished together with the "HTTP/1.1 302 Found" at the beginning of the response, but they are in different colors so that shouldn't be a problem unless you are visually impaired, and it doesn't match your description. hp -- _ | Peter J. Holzer | Story must make more sense than reality. |_|_) | | | | | h...@hjp.at | -- Charles Stross, "Creative writing __/ | http://www.hjp.at/ | challenge!"
signature.asc
Description: PGP signature
-- https://mail.python.org/mailman/listinfo/python-list