[Python-checkins] python/dist/src/Lib urllib2.py,1.62,1.63

jhylton at users.sourceforge.net jhylton at users.sourceforge.net
Tue Feb 24 14:40:37 EST 2004


Update of /cvsroot/python/python/dist/src/Lib
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv1119

Modified Files:
	urllib2.py 
Log Message:
Fix two bugs in the new do_open() implementation for HTTPHandler.

Invoke the standard error handlers for non-200 responses.

Always supply a "Connection: close" header to prevent the server from
leaving the connection open.  Downstream users of the socket may
attempt recv()/read() with no arguments, which would block if the
connection were kept open.


Index: urllib2.py
===================================================================
RCS file: /cvsroot/python/python/dist/src/Lib/urllib2.py,v
retrieving revision 1.62
retrieving revision 1.63
diff -C2 -d -r1.62 -r1.63
*** urllib2.py	15 Feb 2004 21:19:18 -0000	1.62
--- urllib2.py	24 Feb 2004 19:40:33 -0000	1.63
***************
*** 958,961 ****
--- 958,968 ----
          headers = dict(req.headers)
          headers.update(req.unredirected_hdrs)
+         # We want to make an HTTP/1.1 request, but the addinfourl
+         # class isn't prepared to deal with a persistent connection.
+         # It will try to read all remaining data from the socket,
+         # which will block while the server waits for the next request.
+         # So make sure the connection gets closed after the (only)
+         # request.
+         headers["Connection"] = "close"
          try:
              h.request(req.get_method(), req.get_selector(), req.data, headers)
***************
*** 964,973 ****
              raise URLError(err)
  
!         # Pick apart the HTTPResponse object to get the various pieces
!         # of the
!         resp = addinfourl(r.fp, r.msg, req.get_full_url())
!         resp.code = r.status
!         resp.msg = r.reason
!         return resp
  
  
--- 971,984 ----
              raise URLError(err)
  
!         if r.status == 200:
!             # Pick apart the HTTPResponse object to get the addinfourl
!             # object initialized properly
!             resp = addinfourl(r.fp, r.msg, req.get_full_url())
!             resp.code = r.status
!             resp.msg = r.reason
!             return resp
!         else:
!             return self.parent.error("http", req, r.fp, r.status, r.msg,
!                                      r.msg.dict)
  
  




More information about the Python-checkins mailing list