【问题标题】:Python data structure to store http request [closed]存储http请求的Python数据结构[关闭]
【发布时间】:2017-11-28 09:49:13
【问题描述】:

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

无论是字典还是有序字典都不能达到这里的目的。

哪些数据结构通常用于此类需求?

【问题讨论】:

  • 您好,欢迎您!可能值得一看 this article,它提供了一些关于如何提出一个很好的问题的提示,这些问题将为您提供您正在寻找的答案。
  • 感谢 Abhijeetk431 的洞察力,但我问的问题正是我想问的。我使用搜索引擎完成了我的作业。我在这里寻求经验。
  • 您是否尝试将它们存储在列表中?
  • “准备好复制”是什么意思?您需要保留所有重复项,还是忽略它们?元组列表听起来像是在第一种情况下可以完成工作,并且可以很容易地进行调整以防止在插入时出现重复。
  • 我需要完全按照我看到的方式存储它们。什么都不能忽略,必须保持秩序。我在这里谈论的甚至是最不符合 RFC 的请求。

标签: python http header request response


【解决方案1】:

使用(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__() 来提供类似字典的名称查找。我会把它留作练习。

【讨论】:

  • @PeteNoc:没问题。请考虑投票和/或接受这个答案:)
  • 我的点赞被忽略了(我在这里是新手 ;-)),现在正在寻找“接受”按钮。
【解决方案2】:

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

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']}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-10-21
    • 2015-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多