问题
On 谷歌航班 http://www.google.com/travel/flights,搜索信息被编码在 URL 参数中,这样用户就可以轻松地彼此共享航班搜索。
URL 格式如下所示:
https://www.google.com/travel/flights/search?tfs=CBwQAhoeagcIARIDSE5MEgoyMDIxLTA5LTEzcgcIARIDU0ZPGh5qBwgBEgNTRk8SCjIwMjEtMDktMTdyBwgBEgNITkxwAYIBCwj___________8BQAFIAZgBAQ
我正在尝试编写一个程序,可以根据航班信息(出发地、目的地、航班日期、乘客等)生成航班搜索 URL。为此,我需要知道信息是如何在 URL 中编码的,以便我可以重新创建它。
我尝试过的
我知道航班信息是用 base64 或其某些变体编码的(我一直在使用base64decode.org https://www.base64decode.org/供测试用)。对于 2021 年 9 月 13 日至 2021 年 9 月 17 日从 HNL-SFO 出发的往返航班,Google Flights 的网址如下:
https://www.google.com/travel/flights/search?tfs=CBwQAhoeagcIARIDSE5MEgoyMDIxLTA5LTEzcgcIARIDU0ZPGh5qBwgBEgNTRk8SCjIwMjEtMDktMTdyBwgBEgNITkxwAYIBCwj___________8BQAFIAZgBAQ
的部分tfs
下划线之前的查询参数解码为
jHNL
2021-09-13rSFOjSFO
2021-09-17rHNLp
其中包含一些(但不是全部)可识别的航班信息。我不明白的是可识别信息之间的空白。使用这个网站 https://www.babelstone.co.uk/Unicode/whatisit.html,我了解到空白是字符的混合:
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
几个月前,谷歌将他们使用的格式从上述格式更改为编码版本。我想弄清楚如何重新创建编码的 URL,以便我可以更新我的程序而不是停用它。