Python3 Gerrit请求获取回复Json以)]}开头



我正在对gerrit服务器进行REST调用。很直接地说,我不理解反应。看看Chrome的网络流量,Chrome也得到了同样的反应。所以我猜我根本不明白如何解析响应。这是我的代码和一些响应:

import requests
from requests.auth import HTTPBasicAuth
url = 'https://my.gerrit.server.com/changes/?n=1&q=owner=me'
headers = { 'Content-Type': 'application/json', 'charset' : 'UTF-8'}
response = requests.get(url, verify=False, auth=HTTPBasicAuth('usernmae', 'password'), headers=headers)

如果我们打印response.text,我们得到的是:

')]}'n[n  {n    "id": "some_id, ... ,n    "requirements": []n  }n]n'

除了开头(]}之外,它看起来都像有效的JSON。

我该如何解析?

在将该值传递给JSON解析器之前,必须去掉前缀字符。

s[4:] if s.startswith(')]}'') else s
>>> s = ')]}'n[n  {n    "id": "some_id",n    "requirements": []n  }n]n'
>>> json.loads(s[4:] if s.startswith(')]}'') else s)
[{'id': 'some_id', 'requirements': []}]

来自Gerrit文档https://gerrit-review.googlesource.com/Documentation/rest-api.html#output

为了防止跨站点脚本包含(XSSI(攻击,JSON响应体以一个神奇的前缀行开始,在将响应体的其余部分提供给JSON解析器之前,必须剥离该前缀行:

)]}'
[ ... valid JSON ... ]

相关内容

  • 没有找到相关文章

最新更新