获取上次重定向地址 NodeJS 的 URL



我正在尝试获取LinkedIn地址的最后一个重定向地址:https://www.linkedin.com/school/18451/?legacySchoolId=18451 在浏览器中给出:https://www.linkedin.com/school/babson-college/

在 NodeJS 中,我尝试了以下内容(我已经尝试了该帖子的所有解决方案(:

request({ url: 'https://www.linkedin.com/school/18451/?legacySchoolId=18451', followRedirect: false }, function (err, res, body) {
console.log(res.headers.location);
});

但我仍然得到相同的初始地址(legacySchoolId(而不是最终地址(babson(。似乎重定向是由javascript函数执行的,所以我想知道如何在所有用例中获取最后一个地址。

我测试了它,我在这里看到了两个障碍:

1(只有在登录时,您才会获得最终URL,否则您将获得JS重定向到身份验证墙。

2(您在浏览器中看到的最终URL不是来自重定向,而是使用replaceState(HTML5历史记录API(重写显示的URL。那里没有导航到新页面。

我看到两种选择可以解决此问题:

1(使用像Puppeteer这样的无头浏览器。编写代码以使用您的用户名和密码登录,然后导航到这些 URL,稍等片刻(例如,直到呈现某些公司信息(,然后读取当前 URL。

2(仅模拟最必要的请求并从页面中提取信息(不确定它是否适用于LinkedIn(,使用诸如slimtomato之类的库。 然后,您将首先使用用户名和密码模拟登录,然后使用相同的番茄对象(或至少相同的cookie jar(对这些学校链接的请求,以获得最终的URL。我没有找到一种直接的方式来查看页面源代码中的最终 URL,但在这种特定情况下仍然有效的是解析此元标记的页面......

<meta name="apple-itunes-app" content="app-id=288429040, affiliate-data=ct=campaign_vw_smart_app_banner&amp;pt=10746, app-argument=voyager://school/babson-college/?trk=vw_smart_app_banner">

。然后使用不带查询的app-argument值(voyager://school/babson-college/?trk=vw_smart_app_banner(并将voyager://替换为https://www.linkedin.com/

*: 免责声明:那个库是我写的。但是我没有找到具有相同范围的好替代方案。

最新更新