问题
Google Flights上的搜索信息被编码在URL参数中,可能是为了让用户方便地分享航班搜索结果。URL格式如下:
https://www.google.com/travel/flights/search?tfs=CBwQAhoeagcIARIDSE5MEgoyMDIxLTA5LTEzcgcIARIDU0ZPGh5qBwgBEgNTRk8SCjIwMjEtMDktMTdyBwgBEgNITkxwAYIBCwj___________8BQAFIAZgBAQ
我正在尝试编写一个程序,可以根据航班信息(起点、终点、航班日期、乘客数量等)生成航班搜索URL。为此,我需要知道该信息如何在URL中进行编码,以便重新创建它。
我的尝试
我知道航班信息是使用base64编码或其某个变体进行编码的(我一直在使用base64decode.org 进行测试)。对于从HNL-SFO往返于2021-09-13至2021-09-17的航班,Google Flights具有以下URL:
https://www.google.com/travel/flights/search?tfs=CBwQAhoeagcIARIDSE5MEgoyMDIxLTA5LTEzcgcIARIDU0ZPGh5qBwgBEgNTRk8SCjIwMjEtMDktMTdyBwgBEgNITkxwAYIBCwj___________8BQAFIAZgBAQ
tfs
查询参数下划线前面的部分解码为jHNL
2021-09-13rSFOjSFO
2021-09-17rHNLp
这段文字包含了一些(但不是全部)可识别的飞行信息,我不理解的是在这些可识别信息之间的空格。通过这个网站,我了解到这些空格是由多种字符混合组成的:
U+0008 : <control> BACKSPACE [BS]
U+001C : <control> INFORMATION SEPARATOR FOUR {file separator (FS)}
U+0010 : <control> DATA LINK ESCAPE [DLE]
U+0002 : <control> START OF TEXT [STX]
U+001A : <control> SUBSTITUTE [SUB]
U+001E : <control> INFORMATION SEPARATOR TWO {record separator (RS)}
U+006A : LATIN SMALL LETTER J
U+0007 : <control> BELL [BEL]
U+0008 : <control> BACKSPACE [BS]
U+0001 : <control> START OF HEADING [SOH]
U+0012 : <control> DEVICE CONTROL TWO [DC2]
U+0003 : <control> END OF TEXT [ETX]
U+0048 : LATIN CAPITAL LETTER H
U+004E : LATIN CAPITAL LETTER N
U+004C : LATIN CAPITAL LETTER L
...
这表明我没有正确解码数据。我尝试了一些其他变体的base64,但没有任何好运气。
是否有人知道这些信息是如何编码的?另一件我无法弄清楚的事情是划线后面的信息(8BQAFIAZgBAQ
)是如何编码的。根据Google Flights网站的行为,我认为它对乘客信息进行编码,但它的base64解码只产生空格字符。
附加上下文
两年前,我制作了一个可工作的程序版本,可以生成类似于以下的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:f
几个月前,Google将他们使用的格式从上述格式更改为编码版本。我想弄清如何重新创建编码的URL,以便更新我的程序而不是让它退役。