mirror of
				https://github.com/python/cpython.git
				synced 2025-10-31 13:41:24 +00:00 
			
		
		
		
	Fixed Issue6312 - httplib fails with HEAD requests to pages with "transfer-encoding: chunked"
This commit is contained in:
		
							parent
							
								
									ad709ee06b
								
							
						
					
					
						commit
						ed9204346e
					
				
					 4 changed files with 39 additions and 0 deletions
				
			
		|  | @ -560,6 +560,22 @@ Here is an example session that uses the ``GET`` method:: | ||||||
|    >>> data2 = r2.read() |    >>> data2 = r2.read() | ||||||
|    >>> conn.close() |    >>> conn.close() | ||||||
| 
 | 
 | ||||||
|  | Here is an example session that uses ``HEAD`` method. Note that ``HEAD`` method | ||||||
|  | never returns any data. :: | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |    >>> import httplib | ||||||
|  |    >>> conn = httplib.HTTPConnection("www.python.org") | ||||||
|  |    >>> conn.request("HEAD","/index.html") | ||||||
|  |    >>> res = conn.getresponse() | ||||||
|  |    >>> print res.status, res.reason | ||||||
|  |    200 OK | ||||||
|  |    >>> data = res.read() | ||||||
|  |    >>> print len(data) | ||||||
|  |    0 | ||||||
|  |    >>> data == '' | ||||||
|  |    True | ||||||
|  | 
 | ||||||
| Here is an example session that shows how to ``POST`` requests:: | Here is an example session that shows how to ``POST`` requests:: | ||||||
| 
 | 
 | ||||||
|    >>> import httplib, urllib |    >>> import httplib, urllib | ||||||
|  |  | ||||||
|  | @ -524,6 +524,9 @@ def read(self, amt=None): | ||||||
|         if self.fp is None: |         if self.fp is None: | ||||||
|             return '' |             return '' | ||||||
| 
 | 
 | ||||||
|  |         if self._method == 'HEAD': | ||||||
|  |             return '' | ||||||
|  | 
 | ||||||
|         if self.chunked: |         if self.chunked: | ||||||
|             return self._read_chunked(amt) |             return self._read_chunked(amt) | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -212,6 +212,23 @@ def test_chunked(self): | ||||||
|             finally: |             finally: | ||||||
|                 resp.close() |                 resp.close() | ||||||
| 
 | 
 | ||||||
|  |     def test_chunked_head(self): | ||||||
|  |         chunked_start = ( | ||||||
|  |             'HTTP/1.1 200 OK\r\n' | ||||||
|  |             'Transfer-Encoding: chunked\r\n\r\n' | ||||||
|  |             'a\r\n' | ||||||
|  |             'hello world\r\n' | ||||||
|  |             '1\r\n' | ||||||
|  |             'd\r\n' | ||||||
|  |         ) | ||||||
|  |         sock = FakeSocket(chunked_start + '0\r\n') | ||||||
|  |         resp = httplib.HTTPResponse(sock, method="HEAD") | ||||||
|  |         resp.begin() | ||||||
|  |         self.assertEquals(resp.read(), '') | ||||||
|  |         self.assertEquals(resp.status, 200) | ||||||
|  |         self.assertEquals(resp.reason, 'OK') | ||||||
|  |         resp.close() | ||||||
|  | 
 | ||||||
|     def test_negative_content_length(self): |     def test_negative_content_length(self): | ||||||
|         sock = FakeSocket('HTTP/1.1 200 OK\r\n' |         sock = FakeSocket('HTTP/1.1 200 OK\r\n' | ||||||
|                           'Content-Length: -1\r\n\r\nHello\r\n') |                           'Content-Length: -1\r\n\r\nHello\r\n') | ||||||
|  |  | ||||||
|  | @ -31,6 +31,9 @@ Core and Builtins | ||||||
| Library | Library | ||||||
| ------- | ------- | ||||||
| 
 | 
 | ||||||
|  | - Issue #6312: Fixed http HEAD request when the transfer encoding is chunked. | ||||||
|  |   It should correctly return an empty response now. | ||||||
|  | 
 | ||||||
| - Issue #7490: to facilitate sharing of doctests between 2.x and 3.x test | - Issue #7490: to facilitate sharing of doctests between 2.x and 3.x test | ||||||
|   suites, the IGNORE_EXCEPTION_DETAIL directive now also ignores the module |   suites, the IGNORE_EXCEPTION_DETAIL directive now also ignores the module | ||||||
|   location of the raised exception. Based on initial patch by Lennart |   location of the raised exception. Based on initial patch by Lennart | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Senthil Kumaran
						Senthil Kumaran