Python запрашивает заголовок. Как разобрать это? неверный синтаксис с аст? - PullRequest
0 голосов
/ 11 мая 2019

Я хочу преобразовать строку заголовка в словарь.Строка формируется из различных источников, поэтому формат немного сложен.

Это пример:

import ast
import re

header="{'Content-Type': 'text/html', 'Content-Security-Policy': "default-src 'self'; img-src 'self' https://www.google.com/ https://www.google-analytics.com/ https://stats.g.doubleclick.net/; form-action 'self' https://agilemail.createsend.com/ https://www.createsend.com/t/subscribeerror https://www.createsend.com/t/securedsubscribe; frame-src https://www.youtube-nocookie.com/; connect-src 'self'", 'X-Content-Type-Options': 'nosniff', 'X-Amz-Cf-Id': 'XZOj8R9YBVEMbHv93beUYFIizxUbrGKL_LVrS1gjMF-86I8mgtNFYw=='}"

headerDict = ast.literal_eval(header)

Когда я запускаю его, я получаю эту ошибку:

SyntaxError: invalid syntax

Я изменил две двойные кавычки внутри строки в:"default-src [...] https://a.1password.eu/" от " до ""

Но все равно есть ошибка.Как видно из контента с 'self', который содержит одинарные кавычки.

Я вообще не должен менять содержимое заголовка.Однако, если я применяю одно правило, например, заменяю каждый " на "", это возможное решение.Как мне нужно разобрать шапку.Он должен сохранять свои исходные данные, и я не должен ничего менять на нем.

Какое решение в этом случае?Это один из примеров, но я ожидаю увидеть другие варианты.Как преобразовать словосочетание в словарь?

1 Ответ

2 голосов
/ 11 мая 2019

Использовать строки в тройных кавычках:

import ast

header = """{'Content-Type': 'text/html', 'Content-Security-Policy': "default-src 'self'; img-src 'self' https://www.google.com/ https://www.google-analytics.com/ https://stats.g.doubleclick.net/; form-action 'self' https://agilemail.createsend.com/ https://www.createsend.com/t/subscribeerror https://www.createsend.com/t/securedsubscribe; frame-src https://www.youtube-nocookie.com/; connect-src 'self'", 'X-Content-Type-Options': 'nosniff', 'X-Amz-Cf-Id': 'XZOj8R9YBVEMbHv93beUYFIizxUbrGKL_LVrS1gjMF-86I8mgtNFYw=='}"""

ast.literal_eval(header)

Выход:

{'Content-Type': 'text/html',
 'Content-Security-Policy': "default-src 'self'; img-src 'self' https://www.google.com/ https://www.google-analytics.com/ https://stats.g.doubleclick.net/; form-action 'self' https://agilemail.createsend.com/ https://www.createsend.com/t/subscribeerror https://www.createsend.com/t/securedsubscribe; frame-src https://www.youtube-nocookie.com/; connect-src 'self'",
 'X-Content-Type-Options': 'nosniff',
 'X-Amz-Cf-Id': 'XZOj8R9YBVEMbHv93beUYFIizxUbrGKL_LVrS1gjMF-86I8mgtNFYw=='}
...