Multiple headers as tuple
@benoitc arbeitet bereits daran.
Seit 17.4.2020.
Bewertung
Dieses Issue wurde noch nicht bewertet.
Beschreibung
Hi,
This little patch introduces a new optional behavior wherby values of multiple headers are returned as a tuple rather than as a comma delimited string. The comma delimited string really doesn't work for cookies where comma is part of the cookie definition.
From f30d048134717d657ab519771a28588e1c3aafcc Mon Sep 17 00:00:00 2001
Date: Mon, 26 Dec 2016 18:57:36 +0000
Subject: [PATCH] New feature: if multiple headers are found, report them as tuple rather than comma joined string
---
http_parser/parser.pyx | 21 +++++++++++++++++++--
http_parser/pyparser.py | 13 ++++++++++---
2 files changed, 29 insertions(+), 5 deletions(-)
mode change 100644 => 100755 http_parser/parser.pyx
mode change 100644 => 100755 http_parser/pyparser.py
diff --git a/http_parser/parser.pyx b/http_parser/parser.pyx
old mode 100644
new mode 100755
index 2ca92d7..94c7ba4
--- a/http_parser/parser.pyx
+++ b/http_parser/parser.pyx
@@ -97,9 +97,24 @@ cdef int on_header_value_cb(http_parser *parser, char *at,
if res._last_field in res.headers:
hval = res.headers[res._last_field]
if not res._last_was_value:
- header_value = "%s, %s" % (hval, header_value)
+ if res.multiple_headers_as_tuple:
+ if type(hval)!=tuple:
+ tmp=(hval,)
+ header_value=tmp+(header_value,)
+ else:
+ header_value = "%s, %s" % (hval, header_value)
else:
header_value = "%s %s" % (hval, header_value)
+
+ #if name in self._headers:
+ # if self.multiple_headers_as_tuple:
+ # if type(self._headers[name])!=tuple:
+ # value=(self._headers[name])
+ # value+=(value,)
+ # else:
+ # value = "%s, %s" % (self._headers[name], value)
+
+
# add to headers
res.headers[res._last_field] = header_value
@@ -170,12 +185,14 @@ def get_errno_description(errno):
class _ParserData(object):
- def __init__(self, decompress=False, header_only=False):
+ def __init__(self, decompress=False, header_only=False,multiple_headers_as_tuple=False):
self.url = ""
self.body = []
self.headers = IOrderedDict()
self.header_only = header_only
+ self.multiple_headers_as_tuple=multiple_headers_as_tuple
+
self.decompress = decompress
self.decompressobj = None
self._decompress_first_try = True
diff --git a/http_parser/pyparser.py b/http_parser/pyparser.py
old mode 100644
new mode 100755
index 835ca34..93e9457
--- a/http_parser/pyparser.py
+++ b/http_parser/pyparser.py
@@ -39,9 +39,10 @@ class InvalidChunkSize(Exception):
class HttpParser(object):
- def __init__(self, kind=2, decompress=False):
+ def __init__(self, kind=2, decompress=False,multiple_headers_as_tuple=False):
self.kind = kind
self.decompress = decompress
+ self.multiple_headers_as_tuple=multiple_headers_as_tuple
# errors vars
self.errno = None
@@ -355,9 +356,15 @@ class HttpParser(object):
value.append(curr)
value = ''.join(value).rstrip()
- # multiple headers
+
+
if name in self._headers:
- value = "%s, %s" % (self._headers[name], value)
+ if self.multiple_headers_as_tuple:
+ if type(self._headers[name])!=tuple:
+ tmp=(self._headers[name],)
+ value=tmp+(value,)
+ else:
+ value = "%s, %s" % (self._headers[name], value)
# store new header value
self._headers[name] = value
--
2.7.4
- Vorherrschende Sprache
- C
- Sterne
- 345
- Forks
- 93
- PR-Merge-Kennzahlen
- Keine gemergten PRs in 30 T.
Entwicklungsumgebung
Dieses Projekt bietet weder Dev-Container noch Dockerfile noch Beitragsleitfaden – die Einrichtung liegt bei Ihnen. Beginnen Sie mit der README; die allgemeinen Schritte stehen in unserem Leitfaden für den ersten Beitrag.
Erste Schritte
- Lesen Sie das ganze Issue und danach den Beitragsleitfaden des Projekts.
- Schreiben Sie ins Issue, dass Sie es übernehmen — das erspart doppelte Arbeit.
- Forken Sie das Repository und arbeiten Sie in einem Branch.
- Öffnen Sie einen Pull Request, der die Issue-Nummer nennt.
Mehr aus benoitc/http-parser
-
Python 3.12 installation failsEvtl. vergeben @s-t-e-v-e-n-k hat das vor 1039 Tagen übernommen. Offen
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 38/100
benoitc/http-parser#99 · 1 Kommentar · 6 Reaktionen ·
-
Support for python 3.11Offen
Schwierigkeit 3/5 1-2 Tage Anfängerfreundlichkeit 45/100
benoitc/http-parser#98 · 1 Kommentar · 2 Reaktionen ·
-
Access to Trailer fieldsOffen
Schwierigkeit 3/5 1-2 Tage Anfängerfreundlichkeit 50/100
benoitc/http-parser#96 ·
-
Build fails on python3.11Evtl. wieder frei Ein Pull Request dazu wurde ohne Merge geschlossen. Offen
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 45/100
benoitc/http-parser#94 · 1 Reaktion ·
-
Schwierigkeit 3/5 1-2 Tage Anfängerfreundlichkeit 30/100
benoitc/http-parser#93 · 1 Kommentar · 1 Reaktion ·
Alle Issues in benoitc/http-parser
Ähnliche Issues
-
`table_create()` crashes when an `hccalloc()` for the option table failsEvtl. vergeben @marinelay hat das heute übernommen. Offentype: bug
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 78/100
Maintainer antworten meist innerhalb von 1 Tag
-
bug severity: low
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 78/100
AlessandroSangiuliano/Uros#950 ·
-
ESP32
Schwierigkeit 1/5 Unter einer Stunde Anfängerfreundlichkeit 84/100
-
Schwierigkeit 1/5 1-3 Stunden Anfängerfreundlichkeit 82/100
HandBrake/HandBrake#8266 · 1 Kommentar ·
Maintainer antworten meist innerhalb von 1 Tag
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 65/100
saschb2b/Mega-Man-Battle-Network-Cyberworld-Endless#568 ·
Maintainer antworten meist innerhalb von 1 Tag