У меня есть лист Google, где есть функция сценария приложений под названием get_redirect_url (), и он не работает должным образом. Есть ли способ исправить это? Например, в URL блога VSCODE есть перенаправление Meta обновления, и функция не может ее извлечь, бросая эту ошибку:
ошибка: referenceerr: url не определен. Также некоторые другие URL-адреса либо бросают другую ошибку, либо не могут принести.
Visual Studio Code Blogs
< /code>
Это мой сценарий приложений: < /p>
/**
* Returns the redirect location of a url.
*
* @param {string} input The source URL being redirected.
* @return The destination location/URL.
* @customfunction
*/
function GET_REDIRECT_LOCATION(input) {
// Basic validation
if (!input) return "INVALID_URL";
let url = input.toString().trim();
if (!url || !url.includes(".")) return "INVALID_URL";
// Add https if no protocol
if (!url.startsWith("http")) {
url = "https://" + url;
}
try {
// First try with followRedirects: false to catch HTTP redirects
let response = UrlFetchApp.fetch(url, {
muteHttpExceptions: true,
followRedirects: false
});
let status = response.getResponseCode();
// Check for HTTP redirect (3xx status codes)
if (status >= 300 && status < 400) {
const headers = response.getAllHeaders();
const location = headers.Location || headers.location;
if (location) {
return location;
}
}
// Get the HTML content to check for meta redirects
const content = response.getContentText();
// Check for meta refresh redirect
const metaRefresh = content.match(/content=["']?\d+;\s*url=([^"'\s>]+)["']?/i);
if (metaRefresh && metaRefresh[1]) {
let redirectUrl = metaRefresh[1];
// Handle relative URLs - make them absolute
if (redirectUrl.startsWith('/')) {
const baseUrl = new URL(url);
redirectUrl = baseUrl.protocol + '//' + baseUrl.host + redirectUrl;
}
return redirectUrl;
}
// Check for canonical URL as backup
const canonical = content.match(/]*rel=["']canonical["'][^>]*href=["']([^"']+)["']/i);
if (canonical && canonical[1]) {
let canonicalUrl = canonical[1];
// Handle relative URLs
if (canonicalUrl.startsWith('/')) {
const baseUrl = new URL(url);
canonicalUrl = baseUrl.protocol + '//' + baseUrl.host + canonicalUrl;
}
if (canonicalUrl !== url) {
return canonicalUrl;
}
}
return "NO_REDIRECTS_FOUND";
} catch (error) {
return "ERROR: " + error.toString();
}
}
< /code>
Даже после попытки обработать этот крайний случай, он все равно не будет работать. У кого -нибудь есть решения?>
Подробнее здесь: https://stackoverflow.com/questions/797 ... google-app
Есть ли способ получить все места перенаправления из данного сценария XML/HTML в Google Apps? ⇐ Javascript
Форум по Javascript
1755642855
Anonymous
У меня есть лист Google, где есть функция сценария приложений под названием get_redirect_url (), и он не работает должным образом. Есть ли способ исправить это? Например, в URL блога VSCODE есть перенаправление Meta обновления, и функция не может ее извлечь, бросая эту ошибку:
ошибка: referenceerr: url не определен. Также некоторые другие URL-адреса либо бросают другую ошибку, либо не могут принести.
Visual Studio Code Blogs
< /code>
Это мой сценарий приложений: < /p>
/**
* Returns the redirect location of a url.
*
* @param {string} input The source URL being redirected.
* @return The destination location/URL.
* @customfunction
*/
function GET_REDIRECT_LOCATION(input) {
// Basic validation
if (!input) return "INVALID_URL";
let url = input.toString().trim();
if (!url || !url.includes(".")) return "INVALID_URL";
// Add https if no protocol
if (!url.startsWith("http")) {
url = "https://" + url;
}
try {
// First try with followRedirects: false to catch HTTP redirects
let response = UrlFetchApp.fetch(url, {
muteHttpExceptions: true,
followRedirects: false
});
let status = response.getResponseCode();
// Check for HTTP redirect (3xx status codes)
if (status >= 300 && status < 400) {
const headers = response.getAllHeaders();
const location = headers.Location || headers.location;
if (location) {
return location;
}
}
// Get the HTML content to check for meta redirects
const content = response.getContentText();
// Check for meta refresh redirect
const metaRefresh = content.match(/content=["']?\d+;\s*url=([^"'\s>]+)["']?/i);
if (metaRefresh && metaRefresh[1]) {
let redirectUrl = metaRefresh[1];
// Handle relative URLs - make them absolute
if (redirectUrl.startsWith('/')) {
const baseUrl = new URL(url);
redirectUrl = baseUrl.protocol + '//' + baseUrl.host + redirectUrl;
}
return redirectUrl;
}
// Check for canonical URL as backup
const canonical = content.match(/]*rel=["']canonical["'][^>]*href=["']([^"']+)["']/i);
if (canonical && canonical[1]) {
let canonicalUrl = canonical[1];
// Handle relative URLs
if (canonicalUrl.startsWith('/')) {
const baseUrl = new URL(url);
canonicalUrl = baseUrl.protocol + '//' + baseUrl.host + canonicalUrl;
}
if (canonicalUrl !== url) {
return canonicalUrl;
}
}
return "NO_REDIRECTS_FOUND";
} catch (error) {
return "ERROR: " + error.toString();
}
}
< /code>
Даже после попытки обработать этот крайний случай, он все равно не будет работать. У кого -нибудь есть решения?>
Подробнее здесь: [url]https://stackoverflow.com/questions/79740459/is-there-a-way-to-get-all-redirect-locations-from-a-given-xml-html-in-google-app[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия