aio-libs / aio-libs/aiohttp

Should send_request_redirect only happen when we know it's a redirect to be followed?

Đang mở
#4,569 0 bình luận 0 reaction 0 người được giao Xem trên GitHub
enhancement question
Ngôn ngữ chính
Python
Star
16.5k
Fork
2.4k
Merge trung bình
17 giờ 22 phút
Pull request đã merge (30 ngày)
212

Mô tả

🐣 **Is your feature request related to a problem? Please describe.**

When implementing the [`on_request_redirect`](https://aiohttp.readthedocs.io/en/stable/tracing_reference.html#aiohttp.TraceConfig.on_request_redirect) hook in an integration with a distribute Tracer, I realised I needed to recreate all the logic that follows the [`send_request_redirect` call](https://github.com/aio-libs/aiohttp/blob/bb7a4eaf21782612cc4c24fa75b9368ddb204cc7/aiohttp/client.py#L489) in order to record enough details to know if it was worth recording the redirect, or if we'd end-up exiting immediately via [`on_request_exception`](https://aiohttp.readthedocs.io/en/stable/tracing_reference.html#aiohttp.TraceConfig.on_request_exception) or [`on_request_end`](https://aiohttp.readthedocs.io/en/stable/tracing_reference.html#aiohttp.TraceConfig.on_request_end).

💡 **Describe the solution you'd like**

If the `send_request_redirect` call was done around the [end of the block](https://github.com/aio-libs/aiohttp/blob/bb7a4eaf21782612cc4c24fa75b9368ddb204cc7/aiohttp/client.py#L545), then the details given to `on_request_redirect` would be the same as would have been given to `on_request_start`, plus the response to which we are reacting, which gives access to the specific redirect status code, and the incoming headers.

❓ **Describe alternatives you've considered**

* Just duplicating the same checks in my hook, to know not to bother logging a redirect annotation if we're not going to call it, and to extract the URL we're being redirected to and the method we're going to use to access it.
* Just logging that a redirect was called for, without caring where we're going, whether it's devolving to a GET, or whether we'll see any other actions before hitting the "out" code-paths.

📋 **Additional context**

This would also match the state diagram in the docs ([stable](https://aiohttp.readthedocs.io/en/stable/tracing_reference.html#overview) and [latest](https://aiohttp.readthedocs.io/en/latest/tracing_reference.html#overview) are the same) which indicates that "redirect" cannot immediately flow to either "end" or "exception", which is the case now in the case of "redirect without Location/URL header" and "too many redirects" respectively.

Hướng dẫn đóng góp

Mở hướng dẫn đóng góp

Đánh giá

Issue này chưa được đánh giá.

Nhận issue mới trong hộp thư của bạn

Bản tóm tắt ngắn những issue GitHub phù hợp với người mới.