mirror of
				https://github.com/python/cpython.git
				synced 2025-10-31 05:31:20 +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() | ||||
|    >>> 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:: | ||||
| 
 | ||||
|    >>> import httplib, urllib | ||||
|  |  | |||
|  | @ -524,6 +524,9 @@ def read(self, amt=None): | |||
|         if self.fp is None: | ||||
|             return '' | ||||
| 
 | ||||
|         if self._method == 'HEAD': | ||||
|             return '' | ||||
| 
 | ||||
|         if self.chunked: | ||||
|             return self._read_chunked(amt) | ||||
| 
 | ||||
|  |  | |||
|  | @ -212,6 +212,23 @@ def test_chunked(self): | |||
|             finally: | ||||
|                 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): | ||||
|         sock = FakeSocket('HTTP/1.1 200 OK\r\n' | ||||
|                           'Content-Length: -1\r\n\r\nHello\r\n') | ||||
|  |  | |||
|  | @ -31,6 +31,9 @@ Core and Builtins | |||
| 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 | ||||
|   suites, the IGNORE_EXCEPTION_DETAIL directive now also ignores the module | ||||
|   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