用于存储http请求的Python数据结构

时间:2017-11-28 09:49:13

标签: python http header request response

我正在寻找处理和存储http请求标头的想法/技巧。 我需要保留标题的顺序并准备好重复 (甚至是密钥和值的重复)。

字典甚至有序字典都不能用于此目的。

这些要求通常使用哪些数据结构?

2 个答案:

答案 0 :(得分:3)

使用(header, value)元组(或collections.namedtuple)列表:

headers = [('Host', 'abc.com'), ('User-Agent', 'Mozilla'), ('Host', '123.com'), ('TE', 'chunked'), ('User-Agent', 'Safari')]

这将保留每个标题的输入顺序,并且还会保留重复项。

查找效率不如字典高,但(推测)每个请求的标头数量不会非常大。您可以使用列表推导或生成器表达式进行查找(如果更合适)。例 查找User-Agent

user_agents = [header for header in headers if header[0].lower() == 'user-agent']
>>> user_agents
[('User-Agent', 'Mozilla'), ('User-Agent', 'Safari')]

将它包装在提供add_header(header, value)get_header(header)方法的类中相当容易。您可以通过实施__getitem__()按名称提供类似查询的字典。我会把它留作练习。

答案 1 :(得分:-1)

字典可以为此工作: 假设你有一个元组列表(标题,值) 例如:

headers = [('User-Agent', 'Mozilla'),('User-Agent', 'Chrome'), ('Content-Type', 'application/json')]

values= {}

for k, v in headers:
    setdefault(k, []).append(v)

这将保留输入顺序并重复

print(values)
{'User-Agent': ['Mozilla', 'Chrome'], 'Content-Type': ['application/json']}