我将此HTTP标头存储为字符串。我想以JSON格式加载它,以便:
检查标题是否存在。
如果标题不存在,我需要它来打印"no-header"
如果存在,则需要检查某些选定指令的存在和内容。例如,如果找到'Strict-Transport-Security'
,则需要检查它是否具有max-age
指令。并且max-age
是1111。
如何执行此操作?我最初的尝试是:
import json
mystring="{'Server': 'nginx', 'Date': 'Fri, 19 Apr 2019 05:46:00 GMT', 'Content-Type': 'text/html; charset=cp1251', 'Transfer-Encoding': 'chunked', 'Connection': 'keep-alive', 'Content-Encoding': 'gzip', 'Vary': 'Accept-Encoding', 'Strict-Transport-Security': 'max-age=31536000; includeSubDomains; preload'}"
d = json.loads(mystring)
print(d['Strict-Transport-Security'])
我收到此错误:
Traceback (most recent call last): File "test.py", line 5, in
<module>
d = json.loads(mystring)
File "/usr/lib/python2.7/json/__init__.py", line 339, in loads
return _default_decoder.decode(s)
File "/usr/lib/python2.7/json/decoder.py", line 364, in decode
obj, end = self.raw_decode(s, idx=_w(s, 0).end())
File "/usr/lib/python2.7/json/decoder.py", line 380, in raw_decode
obj, end = self.scan_once(s, idx)
ValueError: Expecting property name: line 1 column 2 (char 1)
我需要加载此字符串格式(好像是字典),并将其解析为:
检查标头名称是否存在。
根据某些已定义的条件(例如“包含”,“不包含”等)检查其内容。
答案 0 :(得分:1)
json
使用双引号而不是单引号,因此您可以替换它们:
mystring="{'Server': 'nginx', 'Date': 'Fri, 19 Apr 2019 05:46:00 GMT', 'Content-Type': 'text/html; charset=cp1251', 'Transfer-Encoding': 'chunked', 'Connection': 'keep-alive', 'Content-Encoding': 'gzip', 'Vary': 'Accept-Encoding', 'Strict-Transport-Security': 'max-age=31536000; includeSubDomains; preload'}"
mystring = mystring.replace("'", '"')
>>> print(json.loads(mystring))
{'Transfer-Encoding': 'chunked', 'Vary': 'Accept-Encoding', 'Strict-Transport-Security': 'max-age=31536000; includeSubDomains; preload', 'Content-Encoding': 'gzip', 'Content-Type': 'text/html; charset=cp1251', 'Server': 'nginx', 'Connection': 'keep-alive', 'Date': 'Fri, 19 Apr 2019 05:46:00 GMT'}
或者您可以使用ast.literal_eval
:
import ast
d = ast.literal_eval(mystring)
>>> print(d['Date'])
Fri, 19 Apr 2019 05:46:00 GMT
答案 1 :(得分:0)
mystring="{'Server': 'nginx', 'Date': 'Fri, 19 Apr 2019 05:46:00 GMT', 'Content-Type': 'text/html; charset=cp1251', 'Transfer-Encoding': 'chunked', 'Connection': 'keep-alive', 'Content-Encoding': 'gzip', 'Vary': 'Accept-Encoding', 'Strict-Transport-Security': 'max-age=31536000; includeSubDomains; preload'}"
d = eval(mystring)
print(d['Strict-Transport-Security'])
eval()
函数返回字符串的文字python求值。因此它返回一个字典。您的其余代码应正常工作。