diff options
| author | Frans de Jonge <fransdejonge@gmail.com> | 2026-08-03 22:48:50 +0200 |
|---|---|---|
| committer | Thijs Schreijer <thijs@thijsschreijer.nl> | 2026-08-31 20:00:40 +0200 |
| commit | 3581b58b9d5c09e3e37b7e20b41205ee3553aaa4 (patch) | |
| tree | 010f8b74b83224bd3acfeb95355adab1c5f60e8d | |
| parent | fa9b35a0cf11bc856cbd8bffbef5ad6fb3e62a93 (diff) | |
| download | luasocket-3581b58b9d5c09e3e37b7e20b41205ee3553aaa4.tar.gz luasocket-3581b58b9d5c09e3e37b7e20b41205ee3553aaa4.tar.bz2 luasocket-3581b58b9d5c09e3e37b7e20b41205ee3553aaa4.zip | |
Add HTTP response headers callback to allow for early abort or different sink depending on response
| -rw-r--r-- | src/http.lua | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/src/http.lua b/src/http.lua index 21d3078..6cdc90a 100644 --- a/src/http.lua +++ b/src/http.lua | |||
| @@ -360,6 +360,7 @@ local trequest, tredirect | |||
| 360 | headers = reqt.headers, | 360 | headers = reqt.headers, |
| 361 | proxy = reqt.proxy, | 361 | proxy = reqt.proxy, |
| 362 | maxredirects = reqt.maxredirects, | 362 | maxredirects = reqt.maxredirects, |
| 363 | response_headers = reqt.response_headers, | ||
| 363 | nredirects = (reqt.nredirects or 0) + 1, | 364 | nredirects = (reqt.nredirects or 0) + 1, |
| 364 | create = reqt.create | 365 | create = reqt.create |
| 365 | } | 366 | } |
| @@ -403,6 +404,17 @@ end | |||
| 403 | return tredirect(reqt, headers.location) | 404 | return tredirect(reqt, headers.location) |
| 404 | end | 405 | end |
| 405 | -- here we are finally done | 406 | -- here we are finally done |
| 407 | -- provide an opportunity to abort or replace the sink based on the response headers | ||
| 408 | if nreqt.response_headers then | ||
| 409 | local abort, sink = nreqt.response_headers(code, headers, status) | ||
| 410 | if abort then | ||
| 411 | h:close() | ||
| 412 | return 1, code, headers, status | ||
| 413 | end | ||
| 414 | if sink then | ||
| 415 | nreqt.sink = sink | ||
| 416 | end | ||
| 417 | end | ||
| 406 | if shouldreceivebody(nreqt, code) then | 418 | if shouldreceivebody(nreqt, code) then |
| 407 | h:receivebody(headers, nreqt.sink, nreqt.step) | 419 | h:receivebody(headers, nreqt.sink, nreqt.step) |
| 408 | end | 420 | end |
