Skip to content

Implement support for multiple headers with the same name in sessions - #1335

Merged
jkbrzt merged 7 commits into
httpie:masterfrom
isidentical:list-headers
Apr 3, 2022
Merged

Implement support for multiple headers with the same name in sessions#1335
jkbrzt merged 7 commits into
httpie:masterfrom
isidentical:list-headers

Conversation

@isidentical

Copy link
Copy Markdown
Contributor

Fixes #1331

@isidentical
isidentical marked this pull request as ready for review March 30, 2022 12:35
@codecov-commenter

codecov-commenter commented Apr 3, 2022

Copy link
Copy Markdown

Codecov Report

Merging #1335 (6d8ee7f) into master (4d7d6b6) will decrease coverage by 0.45%.
The diff coverage is 96.14%.

@@            Coverage Diff             @@
##           master    #1335      +/-   ##
==========================================
- Coverage   97.28%   96.83%   -0.46%     
==========================================
  Files          67       96      +29     
  Lines        4235     6821    +2586     
==========================================
+ Hits         4120     6605    +2485     
- Misses        115      216     +101     
Impacted Files Coverage Δ
tests/test_binary.py 100.00% <ø> (ø)
httpie/compat.py 31.11% <27.90%> (-68.89%) ⬇️
tests/conftest.py 77.14% <61.53%> (-9.82%) ⬇️
httpie/manager/__main__.py 82.35% <82.35%> (ø)
httpie/output/lexers/metadata.py 82.35% <82.35%> (ø)
httpie/output/lexers/http.py 86.36% <86.36%> (ø)
tests/test_ssl.py 92.66% <87.50%> (-2.28%) ⬇️
httpie/models.py 95.19% <90.00%> (-2.18%) ⬇️
httpie/manager/tasks/sessions.py 92.45% <92.45%> (ø)
tests/test_uploads.py 97.70% <92.59%> (-2.30%) ⬇️
... and 81 more

Continue to review full report at Codecov.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update c157948...6d8ee7f. Read the comment docs.

@jkbrzt
jkbrzt merged commit d03e3f4 into httpie:master Apr 3, 2022
alutoin-cloudamite added a commit to alutoin-cloudamite/cli that referenced this pull request Jul 31, 2026
Completes the fix for httpie#998, which reported that a cookie carrying only
`Max-Age=0` (no `Expires`) was never removed from the session file. httpie#1029
addressed that by translating `max-age` into `expires` in
`_max_age_to_expires()`, gated on `max_age.isdigit()`.

`str.isdigit()` is False for any negative value, so `Max-Age=-1` still never
receives an `expires` key, is never recognised as expired by
`get_expired_cookies()`, and is never removed -- the same symptom httpie#998
described, for the other common deletion idiom. HTTPie keeps sending a cookie
the server has told it to delete.

RFC 6265 section 5.2.2: "If delta-seconds is less than or equal to zero, let
expiry-time be the earliest representable date and time."

Parse with `int()` instead, so negative deltas are honoured while unparseable
values are still ignored rather than raising -- note that a narrower fix such as
`max_age.lstrip('-').isdigit()` would make `int('--1')` throw, which the new
test pins. This matches the standard library, which parses `max-age` with
`int()` in `http.cookiejar`.

Also rewrites the docstring. It read `HACK/FIXME: <psf/requests#5743>`, but that
issue was declined as a no-op rather than fixed, so this is not a workaround
awaiting upstream removal. The docstring now records the RFC rule, and that the
function is only load-bearing for pre-3.1.0 session layouts: those stored
cookies as a domainless dict, so `http.cookiejar`'s `clear(domain, path, name)`
could not match them, whereas since httpie#1335 the layout carries domain and path and
the cookiejar removes expired cookies by itself. Removing this function
therefore means dropping support for the old layout first.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Sessions doesn't support multiple headers sharing the same name

3 participants