httpx
httpx copied to clipboard
closedResourceError intermittently when using httpx asyncclient to send the request
we are observing closedResourceError when sending multiple requests using httpx async client. httpx version used is 0.19.0. is this issue known and fixed in any later version?
Logs: resp = await asyncio.gather(*[self.async_send_request(method,self.dest_host,self.dest_port,uri,i,payload=payload,headers=headers) for i in range(int(times) )]) File "/env/lib64/python3.9/site-packages/ocnftest_lib/scp_Pcf_client.py", line 175, in async_send_request return await self.conn.request(method,"http://{}:{}{}".format(self.dest_host,self.dest_port,uri),data=payload,headers=headers,allow_redirects=False) File "/env/lib64/python3.9/site-packages/httpx/_client.py", line 1494, in request response = await self.send( File "/env/lib64/python3.9/site-packages/httpx/_client.py", line 1586, in send response = await self._send_handling_auth( File "/env/lib64/python3.9/site-packages/httpx/_client.py", line 1616, in _send_handling_auth response = await self._send_handling_redirects( File "/env/lib64/python3.9/site-packages/httpx/_client.py", line 1655, in _send_handling_redirects response = await self._send_single_request(request, timeout) File "/env/lib64/python3.9/site-packages/httpx/_client.py", line 1699, in _send_single_request ) = await transport.handle_async_request( File "/env/lib64/python3.9/site-packages/httpx/_transports/default.py", line 281, in handle_async_request ) = await self._pool.handle_async_request( File "/env/lib64/python3.9/site-packages/httpcore/_async/connection_pool.py", line 234, in handle_async_request response = await connection.handle_async_request( File "/env/lib64/python3.9/site-packages/httpcore/_async/connection.py", line 148, in handle_async_request return await self.connection.handle_async_request( File "/env/lib64/python3.9/site-packages/httpcore/_async/http2.py", line 165, in handle_async_request return await h2_stream.handle_async_request( File "/env/lib64/python3.9/site-packages/httpcore/_async/http2.py", line 339, in handle_async_request await self.send_headers(method, url, headers, has_body, timeout) File "/env/lib64/python3.9/site-packages/httpcore/_async/http2.py", line 398, in send_headers await self.connection.send_headers(self.stream_id, headers, end_stream, timeout) File "/env/lib64/python3.9/site-packages/httpcore/_async/http2.py", line 274, in send_headers await self.socket.write(data_to_send, timeout) File "/env/lib64/python3.9/site-packages/httpcore/_backends/anyio.py", line 77, in write return await self.stream.send(data) File "/env/lib64/python3.9/site-packages/anyio/_backends/_asyncio.py", line 1116, in send raise ClosedResourceError anyio.ClosedResourceError
Sample code: async def send_request(self,payload,times,method,uri,headers): resp = await asyncio.gather(*[self.async_send_request(method,self.dest_host,self.dest_port,uri,i,payload=payload,headers=headers) for i in range(int(times) )]) await self.conn.aclose() log.logger.info("[+] @{} {} {}".format(method,resp[int(times)-1].status_code,uri)) return resp[int(times)-1]
async def async_send_request(self,method,dest_host,dest_port,uri,times,payload=None,headers=None):
if self.security == 'secure':
return await self.conn.request(method,"https://{}:{}{}".format(self.dest_host,self.dest_port,uri),data=payload,headers=headers,allow_redirects=False)
else:
return await self.conn.request(method,"http://{}:{}{}".format(self.dest_host,self.dest_port,uri),data=payload,headers=headers,allow_redirects=False)
def send_message: self.conn = httpx.AsyncClient(http2=True,http1=False,proxies=self.proxies,timeout=10) response = asyncio.run(self.send_request(payload,times,method,uri,headers))