I'm trying to use httplib to make a PUT request. I'd like to be able to correctly use the 100-continue expectation handshake as HTTP/1.1 recommends, such that I wait for a 100 status code back before I send the body. The only examples I've found immediately send the request body without waiting for a 100 status return.
I'd like to do something similar to: ----- conn = httplib.HTTPConnection( ... ) conn.putrequest( "PUT", url ) if data_length is None: conn.putheader( "Transfer-Encoding", "chunked" ) else: conn.putheader( "Content-Length", str(data_length) ) conn.putheader( "Expect", "100-continue" ) conn.endheaders() # Wait for any of: timeout, 100, or other error status if timeout or got_100: # Start sending data using conn.send() method ----- There are two problems trying to do this: 1. The endheaders() doesn't actually send any data. You have to do a conn.send( "" ) with an empty string for the headers to get to the server, which is needed before it can then send back a 100 (or other status code). 2. There's no way to wait for a 100 response, or wait for a response with a timeout -- both of which are needed to do the 100-continue logic of HTTP/1.1. Solving #1 is easy, as long as you know to do it. Solving #2 appears to require changes to the httplib library. Something along the lines of adding additional optional arguments to the getresponse() method, as in: resp = conn.getresponse( ignore_continue=False, timeout=5 ) if resp is None: # timeout occured elif resp.status == httplib.CONTINUE: # got 100 continue elif resp.status == httplib.EXPECTATION_FAILED: # server doesn't understand 100-continue elif resp.status == httplib.REQUEST_ENTITY_TOO_LARGE: # message too large for server elif resp.status == httplib.LENGTH_REQUIRED: # can't do chunked encoding, etc. Is there in fact some way to do this that I'm missing, and if not is this something that makes sense to try to fix in httplib? -- Deron Meranda http://deron.meranda.us/ _______________________________________________ Web-SIG mailing list Web-SIG@python.org Web SIG: http://www.python.org/sigs/web-sig Unsubscribe: http://mail.python.org/mailman/options/web-sig/archive%40mail-archive.com