@@ -86,14 +86,11 @@ class Response:
8686
8787 encoding = None
8888
89- def __init__ (
90- self , sock : SocketType , session : "Session" , fast_close : bool = False
91- ) -> None :
89+ def __init__ (self , sock : SocketType , session : "Session" ) -> None :
9290 self .socket = sock
9391 self .encoding = "utf-8"
9492 self ._cached = None
9593 self ._headers = {}
96- self ._fast_close = fast_close
9794
9895 # _start_index and _receive_buffer are used when parsing headers.
9996 # _receive_buffer will grow by 32 bytes everytime it is too small.
@@ -230,27 +227,16 @@ def _throw_away(self, nbytes: int) -> None:
230227 to_read -= self ._recv_into (buf , to_read )
231228
232229 def close (self ) -> None :
233- """Drain the remaining ESP socket buffers. We assume we already got what we wanted ."""
230+ """Close out the socket. If we have a session free it instead ."""
234231 if not self .socket :
235232 return
236- # Make sure we've read all of our response.
237- if self ._cached is None and not self ._fast_close :
238- if self ._remaining and self ._remaining > 0 :
239- self ._throw_away (self ._remaining )
240- elif self ._chunked :
241- while True :
242- chunk_header = bytes (self ._readto (b"\r \n " )).split (b";" , 1 )[0 ]
243- if not chunk_header :
244- break
245- chunk_size = int (bytes (chunk_header ), 16 )
246- if chunk_size == 0 :
247- break
248- self ._throw_away (chunk_size + 2 )
233+
249234 if self ._session :
250235 # pylint: disable=protected-access
251236 self ._session ._connection_manager .free_socket (self .socket )
252237 else :
253238 self .socket .close ()
239+
254240 self .socket = None
255241
256242 def _parse_headers (self ) -> None :
@@ -365,13 +351,11 @@ def __init__(
365351 socket_pool : SocketpoolModuleType ,
366352 ssl_context : Optional [SSLContextType ] = None ,
367353 session_id : Optional [str ] = None ,
368- fast_close : Optional [bool ] = False ,
369354 ) -> None :
370355 self ._connection_manager = get_connection_manager (socket_pool )
371356 self ._ssl_context = ssl_context
372357 self ._session_id = session_id
373358 self ._last_response = None
374- self ._fast_close = fast_close
375359
376360 @staticmethod
377361 def _check_headers (headers : Dict [str , str ]):
@@ -389,7 +373,6 @@ def _check_headers(headers: Dict[str, str]):
389373 def _send (socket : SocketType , data : bytes ):
390374 total_sent = 0
391375 while total_sent < len (data ):
392- # ESP32SPI sockets raise a RuntimeError when unable to send.
393376 try :
394377 sent = socket .send (data [total_sent :])
395378 except OSError as exc :
@@ -399,6 +382,7 @@ def _send(socket: SocketType, data: bytes):
399382 # Some worse error.
400383 raise
401384 except RuntimeError as exc :
385+ # ESP32SPI sockets raise a RuntimeError when unable to send.
402386 raise OSError (errno .EIO ) from exc
403387 if sent is None :
404388 sent = len (data )
@@ -566,7 +550,7 @@ def request(
566550 if not socket :
567551 raise OutOfRetries ("Repeated socket failures" ) from last_exc
568552
569- resp = Response (socket , self , fast_close = self . _fast_close ) # our response
553+ resp = Response (socket , self ) # our response
570554 if allow_redirects :
571555 if "location" in resp .headers and 300 <= resp .status_code <= 399 :
572556 # a naive handler for redirects
@@ -594,6 +578,10 @@ def request(
594578 self ._last_response = resp
595579 return resp
596580
581+ def options (self , url : str , ** kw ) -> Response :
582+ """Send HTTP OPTIONS request"""
583+ return self .request ("OPTIONS" , url , ** kw )
584+
597585 def head (self , url : str , ** kw ) -> Response :
598586 """Send HTTP HEAD request"""
599587 return self .request ("HEAD" , url , ** kw )
0 commit comments