【发布时间】:2016-12-12 12:31:49
【问题描述】:
我想解析 Accept-Language 标头。我找到的所有答案都涉及解析字符串,但不处理输入格式错误的情况。
例如,如果用户发送此标头Accept-Language: en,es;q=0.5;*;q=0.5,由于第二个; 而格式错误,该怎么办。是否有任何包可以提供简单的解析和适当的异常引发?
【问题讨论】:
-
这当然取决于您使用什么语言以及“解析”语言是什么意思。您是否只想获得
en和es等令牌?你想用q=0.5做什么?你想忽略它还是抛出错误? -
在标题格式错误的情况下,我想让用户知道,但为了检测格式错误的标题,我更愿意自己不对规则进行硬编码
-
那么问题是“好”标题是什么样的?必须有人为格式正确的标头定义规则,您可以使用该规则来解析标头。如果在某些时候标题不符合规则,那么它的格式错误。
q=0.5代表一个权重,它应该始终出现在语言助记符之后。您可以将其用作遵循的基本规则 -
我认为当有像
en;q=0.4这样的明确权重定义时,该语言应该后跟;,并且第二种语言应该放在像en;q=0.4, de;q=0.1这样的逗号之后,如果您注意到在提供的示例中,星号前有一个;,我认为这是错误的。我对此不正确吗?如果我是,那么我认为我在寻找什么很清楚。 -
嗯,你可以有一个语言范围,然后是
;,然后是权重。你可以在这里看到定义:w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.4Accept-Language = "Accept-Language" ":" 1#( language-range [ ";" "q" "=" qvalue ] )然后language-range = ( ( 1*8ALPHA *( "-" 1*8ALPHA ) ) | "*" )
标签: python http http-headers python-3.5