如何解码及生成Google Flights航班搜索URL?
Google Flights tfs参数编码规则解答
- 核心编码逻辑:你看到的
tfs参数是Protocol Buffers(PB)序列化后再做URL安全Base64编码的结果,并非直接对文本做Base64编码。Google预先定义了航班搜索参数的PB结构,填入出发地、目的地、航班日期、乘客数量、舱位、货币等信息后,序列化为二进制流,再用URL安全Base64规则转换为可见字符串(转换规则为:标准Base64中的+替换为-、/替换为_,删除末尾的=填充符)。 - 之前解码出现控制字符的原因:你直接将Base64解码后的二进制流当做ASCII/UTF-8文本转换,那些所谓的控制字符其实是PB结构的字段标识、长度前缀等二进制元信息,不是文本控制符,自然无法直接识别。
- 下划线分段的误解:参数中的下划线只是URL安全Base64的合法字符,并非用来分隔不同信息段的标识,你单独截取下划线后的内容解码自然无法得到有效信息,乘客、舱位这类参数是拆分存储在整个PB结构的不同字段中,不存在单独的乘客信息编码段。
- 最低成本的兼容方案:目前Google Flights仍然完全兼容旧版URL的参数规则,不需要反向破解PB结构即可完成URL生成:将你之前生成的旧格式锚点参数(
#后的所有内容)做URL编码后,作为q参数的值传给新的域名路径即可,示例如下:
旧格式URL:
转换后的可用新格式URL:https://www.google.com/flights?hl=en#flt=ORD.MCO.2021-07-16*MCO.ORD.2021-07-19;c:USD;e:1;px:2,2,0,0;sd:1;t:fhttps://www.google.com/travel/flights?q=flt%3DORD.MCO.2021-07-16%2AMCO.ORD.2021-07-19%3Bc%3AUSD%3Be%3A1%3Bpx%3A2%2C2%2C0%2C0%3Bsd%3A1%3Bt%3Af - 若必须生成
tfs格式参数:现有公开开源项目已经完成了对应PB结构的逆向工作,直接复用已有的结构定义和编码逻辑即可,无需自行从零破解。
内容的提问来源于stack exchange,提问作者ReachingNewFlights
相关产品推荐
相关产品推荐

