【发布时间】:2020-12-15 21:35:01
【问题描述】:
我在 Google Apps 脚本中有以下代码,它使用基本身份验证通过 HTTP 从网页检索 CSV 数据并将其放入电子表格:
CSVImport.gs
function parseCSVtoSheet(sheetName, url)
{
// Credentials
var username = "myusername";
var password = "mypassword";
var header = "Basic " + Utilities.base64Encode(username + ":" + password);
// Setting the authorization header for basic HTTP authentication
var options = {
"headers": {
"Authorization": header
}
};
// Getting the ID of the sheet with the name passed as parameter
var spreadsheet = SpreadsheetApp.getActive();
var sheet = spreadsheet.getSheetByName(sheetName);
var sheetId = sheet.getSheetId();
// Getting the CSV data and placing it into the spreadsheet
var csvContent = UrlFetchApp.fetch(url, options).getContentText();
var resource = {requests: [{pasteData: {data: csvContent, coordinate: {sheetId: sheetId}, delimiter: ","}}]};
Sheets.Spreadsheets.batchUpdate(resource, spreadsheet.getId());
}
直到最近我才在UrlFetchApp.fetch 行随机收到以下错误:
Exception: Unexpected error: http://www.myurl.com/data/myfile.csv (line 21, file "CSVImport")
我试过了:
- 将凭据直接放在 URL 中,而不是放在 Authorization 标头中(我收到另一个错误,提示“不允许登录信息”)。
- 当我将凭据传递到 headers 对象时,将凭据编码为 base64(不起作用,同样的错误)。
- 完全删除身份验证(可以预见的是,我收到了来自 HTTP 页面的 401 响应)。
我不知道还有什么可以尝试的,以及为什么这会突然突然崩溃。有什么建议吗?
【问题讨论】:
-
我遇到了同样的问题,但特别是 CSV 文件。它也不是随机的,从今天 05:16 UTC 开始对我来说一直是一致的。
-
顺便说一句,您可能希望将
var csvContent = UrlFetchApp.fetch(url, options).getContentText();拆分为两行以进行调试,尽管我已经有了它并且它在fetch()调用时崩溃了,所以在这种情况下没有什么可收集的. -
我在一大早使用 UrlFetchApp 从数据源获取一些股票信息的脚本上遇到了同样的问题。几个月来一直在完美地工作,突然在 12 月 7 日开始出现指向这条线的“意外错误”。我可以确认,当我使用相同的确切 URL 使用 importhtml 手动获取时,我得到了数据。谷歌最终发生了一些变化......但是什么?好的,事实证明这是一个Google issue,它影响了很多人。至少我们并不孤单……
-
@Ploni 我忘了在帖子中提及,但实际上我在调试时确实拆分了这些行,以查看是否有任何问题,但问题确实出在
fetch()上。似乎是 Google 的问题 - 希望它尽快得到解决。 -
我建议大家给这个问题“加注星标”,请参阅@ziganotschka 回复中的链接
标签: javascript google-apps-script basic-authentication urlfetch