python - 我的 Python3 HTTP 头解析代码可以吗?

标签 python parsing http web python-3.4

我在 Python3 中编写了一个简短的函数来解析 HTTP header 。我想知道是否有人能够看一下它并告诉我是否可以做一些不同的事情来使代码更好。我目前所用的产生了所需的结果,但我不确定是否会出现此代码无法产生所需结果的情况。

这是我的:

def _parse_headers(self, headers):
  lines = headers.split("\r\n")
  info = lines[0].split(" ")

  method = None
  path = None
  protocol = None
  headers = {}

  if len(info) > 0:
    method = info[0]
  if len(info) > 1:
    path = info[1]
  if len(info) > 2:
    protocol = info[2]

  for line in lines[1:]:
    if line:
      parts = line.split(":")
      key = None
      value = None
      if len(parts) > 0:
        key = parts[0]
      if len(parts) > 1:
        value = parts[1]
      if not key is None and not value is None:
        headers[key.strip().upper()] = value.strip()

  return {
    "method": method,
    "path": path,
    "protocol": protocol,
    "headers": headers
  }

最佳答案

正如 André 在评论中指出的那样,除非作为练习,否则不要掉以轻心地解析 HTTP。在实际程序中,如果可能,您通常应该坚持现有的、成熟的实现。

请注意,除了整体消息结构之外,每个 header 都有其独特的内部结构,您也经常需要对其进行解析; Werkzeug可以help there .

您的代码明显的具体问题是:

  • 给定一个 header Host:www.example.com:80,它将返回www.example.com作为它的值;
  • 给定多个具有相同名称的 header ,它只会返回最后一个的值。

关于python - 我的 Python3 HTTP 头解析代码可以吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25794696/

相关文章:

parsing - 使用秒差距解析命令式语言的奇怪行为

java - 为什么我从浏览器获得了正确的 URL 响应,但 Android 的 "HttpGet"中却是空的?

python - 无法使用 python 使攻击动画适用于街机库

Python 删除列表中的重复项(而不是保留它们)

python - 如何更改 matplotlib 图的默认窗口位置?

服务器上的 JSON 解析与解析客户端

c# - 使用 DateTime.TryParseExact 解析非标准日期格式

json - 从 Android 设备向服务器发送 JSON 消息

json - 将 "{}"主体解码为结构时,Golang 不会产生错误

python - 如何在mongodb中以一个字段作为主键保存数据