【发布时间】:2020-06-26 15:39:39
【问题描述】:
我一直在尝试使用 Google 表格中的 Google Apps 脚本运行一些 URL 重定向测试,我通过获得响应代码以及其中一些的最终重定向 URL 取得了成功,但大多数链接都不起作用。
我要检查的链接示例:
https://www.airbnb.com/rooms/4606613
https://www.airbnb.com/rooms/4661522
https://www.airbnb.com/rooms/6014647
https://www.airbnb.com/rooms/14452305
https://www.airbnb.com/rooms/15910617
我几乎需要检查这些链接是否会重定向到https://www.airbnb.com/s/homes
使用下面的脚本,我得到以下列表,这是不正确的,因为它们都会重定向到https://www.airbnb.com/s/homes:
https://www.airbnb.com/rooms/4606613
https://www.airbnb.com/s/homes
https://www.airbnb.com/s/homes
https://www.airbnb.com/rooms/14452305
https://www.airbnb.com/rooms/15910617
网站似乎需要 1 秒来进行重定向,这可能是问题所在。
代码下方:
function urlProtocol(url){
return URI(url).protocol()
}
function urlHostname(url){
return URI(url).hostname()
}
function getRedirects(url) {
eval(UrlFetchApp.fetch('https://rawgit.com/medialize/URI.js/gh-pages/src/URI.js').getContentText());
var params = {
'followRedirects': false,
'muteHttpExceptions': true
};
var baseUrl = urlProtocol(url) + "://" + urlHostname(url),
response = UrlFetchApp.fetch(url, params),
responseCode = response.getResponseCode();
if(response.getHeaders()['Location']){
var redirectedUrl = getRedirects(baseUrl + response.getHeaders()['Location']);
return redirectedUrl;
} else {
return url;
}
}
【问题讨论】:
-
代码上,followRedirects方法设置为false,和FetchApp有区别吗?因为我相信参数与评估相关
-
好吧,我显然没有阅读您问题中的代码,对之前的评论感到抱歉(已经意识到并删除了)。不过,有一件事仍然有效 - 我会先检查响应代码是否为 3xx,然后检查标头,然后再递归。
-
就目前而言,您的逻辑对我来说似乎很好。您能否添加一个未设置为重定向到 /home 的 URL 示例?
-
@OlegValter 一个示例 URL 是 airbnb.com/rooms/23861670 ,运行代码时我没有重定向,但大多数都一样。
-
谢谢 - 你知道吗,我检查了自己,问题可能出在 airbnb 上。一些链接不一致地导致重定向。例如,
15910617房间有时会重定向到家,有时会加载所需的房间。
标签: google-apps-script google-sheets urlfetch