aio-libs / aio-libs/aiohttp

ClientWebSocketResponse: Add way to get close message when using msg iterator

Aperta
#7,682 1 commento 0 reazioni 0 assegnatari Vedi su GitHub
enhancement
Lingua principale
Python
Stelle
16.5k
Fork
2.4k
Merge medio
17h 22m
PR unite (30g)
212

Descrizione

### Is your feature request related to a problem?

The websocket server I'm connecting to will send a close message. I want to get this message.

There doesn't seem to a way to do this when using the async message iterator on ClientWebSocketResponse:

e.g.

async with session.ws_connect('http://example.org/ws') as ws:
async for msg in ws:
if msg.type == aiohttp.WSMsgType.TEXT:
await ws.send_str(msg.data + '/answer')
elif msg.type == aiohttp.WSMsgType.ERROR:
break
# No way to get close message here

### Describe the solution you'd like

There should be a `ClientWebSocketResponse.close_message` property that is set when the server has sent a close message

### Describe alternatives you've considered

As a workaround, I'm using the `ClientWebSocketResponse.receive()` method instead of async message iterator. Then I'm able to handle the close message my self. E.g.:

close_msg = None
async with session.ws_connect('http://example.org/ws') as ws:
while True:
msg = await ws.receive()
if msg.type == aiohttp.WSMsgType.TEXT:
await ws.send_str(msg.data + '/answer')
elif msg.type == aiohttp.WSMsgType.ERROR:
break
elif msg.type == WSMsgType.CLOSE:
close_msg = msg.extra
break
logger.info(f"Closed: {ws.close_code} {close_msg}")

### Related component

Client

### Additional context

_No response_

### Code of Conduct

- [X] I agree to follow the aio-libs Code of Conduct

Guida per i contributori

Apri la guida per i contributori

Valutazione

Questa issue non è ancora stata valutata.

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.