[Python-Dev] HTTP/1.1 capable httplib module

Greg Stein gstein@lyra.org
Mon, 22 May 2000 00:47:50 -0700 (PDT)


I've integrated all of these changes into the httplib.py posted on my
pages at:
    http://www.lyra.org/greg/python/

The actual changes are visible thru ViewCVS at:
    http://www.lyra.org/cgi-bin/viewcvs.cgi/gjspy/httplib.py/


The test code is still in there, until a test_httplib can be written.

Still missing: doc for the new-style semantics.

Cheers,
-g

On Fri, 19 May 2000, Greg Stein wrote:
> On Fri, 19 May 2000, Guido van Rossum wrote:
> > > I applied the recent changes to the CVS httplib to Greg's httplib
> > > (call it httplib11) this afternoon.  The result is included below.  I
> > > think this is quite close to checking in,
> 
> I'll fold the changes into my copy here (at least), until we're ready to
> check into Python itself.
> 
> THANK YOU for doing this work. It is the "heavy lifting" part that I just
> haven't had a chance to get to myself.
> 
> I have a small, local change dealing with the 'Host' header (it shouldn't
> be sent automatically for HTTP/1.0; some httplib users already send it
> and having *two* in the output headers will make some servers puke).
> 
> > > but it could use a slightly
> > > better test suite.
> > 
> > Thanks -- but note that I don't have the time to review the code.
> 
> I'm reviewing it, too. Gotta work around the fact that Jeremy re-indented
> the code, though... :-)
> 
> > > There are a few outstanding questions.
> > > 
> > > httplib11 does not implement the debuglevel feature.  I don't think
> > > it's important, but it is currently documented and may be used.
> > > Guido, should we implement it?
> > 
> > I think the solution is to provide the API ignore the call or
> > argument.
> 
> Can do: ignore the debuglevel feature.
> 
> > > httplib w/SSL uses a constructor with this prototype:
> > >     def __init__(self, host='', port=None, **x509):
> > > It looks like the x509 dictionary should contain two variables --
> > > key_file and cert_file.  Since we know what the entries are, why not
> > > make them explicit?
> > >     def __init__(self, host='', port=None, cert_file=None, key_file=None):
> > > (Or reverse the two arguments if that is clearer.)
> > 
> > The reason for the **x509 syntax (I think -- I didn't introduce it) is
> > that it *forces* the user to use keyword args, which is a good thing
> > for such an advanced feature.  However there should be code that
> > checks that no other keyword args are present.
> 
> Can do: raise an error if other keyword args are present.
> 
> > > The FakeSocket class in CVS has a comment after the makefile def line
> > > that says "hopefully, never have to write."  It won't do at all the
> > > right thing when called with a write mode, so it ought to raise an
> > > exception.  Any reason it doesn't?
> > 
> > Probably laziness of the code.  Thanks for this code review (I guess I
> > was in a hurry when I checked that code in :-).
> 
> +1 on raising an exception.
> 
> > 
> > > I'd like to add a couple of test cases that use HTTP/1.1 to get some
> > > pages from python.org, including one that uses the chunked encoding.
> > > Just haven't gotten around to it.  Question on that front: Does it
> > > make sense to incorporate the test function in the module with the std
> > > regression test suite?  In general, I would think so.  In this
> > > particular case, the test could fail because of host networking
> > > problems.  I think that's okay as long as the error message is clear
> > > enough. 
> > 
> > Yes, I agree.  Maybe it should raise ImportError when the network is
> > unreachable -- this is the one exception that the regrtest module
> > considers non-fatal.
> 
> +1 on shifting to the test modules.
> 
> Cheers,
> -g
> 
> -- 
> Greg Stein, http://www.lyra.org/
> 
> 

-- 
Greg Stein, http://www.lyra.org/