我正在编写一个脚本,并使用此脚本测试API调用:
function floorGrab(){
var ss = SpreadsheetApp.getActiveSpreadsheet();
var helpSheet = ss.getSheetByName("Helper");
var urls = helpSheet.getRange("aa2:aa").getDisplayValues();
console.log(urls[0]);
var options = {
muteHttpExceptions: true,
}
var rawData = UrlFetchApp.fetch(urls[0], options);
console.log(rawData);
var data = JSON.parse(rawData);
console.log(data);
}
本例中的URL为:https://api-mainnet.magiceden.io/sft/markets/4YjkU4KrCnWhQ7DhMNLkUqeJjdhgK2xZYYmt5MgNfPYq?name=Pipelia-Wing
当访问这个网站时,JSON很容易加载。但是当调用它的时候,它会返回这个,当然这是无法解析的:
{ toString: [Function],
getResponseCode: [Function],
getContent: [Function],
getAllHeaders: [Function],
getHeaders: [Function],
getContentText: [Function],
getBlob: [Function],
getAs: [Function] }
Appscript中有没有一种方法可以让页面首先完全加载,然后获取JSON?我已经尝试了许多不同的选项,比如添加一个Origin,在选项中对数据进行字符串化,请求JSON等。但一切都是一样的。
1条答案
按热度按时间snvhrwxg1#
无法解析JSON的原因是
request failed
。由于在上面的代码中将选项muteHttpExceptions
设置为true,因此无法看到错误响应。在Class UrlFetchApp中,如果此选项设置为true;
如果响应代码指示失败,fetch不会抛出异常,而是返回HTTPResponse。
这就是为什么当您有
console.log(rawData)
时,您看到的输出是HTTPResponse编码:
我尝试在不添加
muteHttpExceptions
选项的情况下从您的示例中调用API执行日志:
异常:https://api-mainnet.magiceden.io的请求失败,返回代码403。截断的服务器响应:错误代码:1020(使用muteHttpExceptions选项检查完整响应)
HTTP响应码(403):
HTTP 403 Forbidden响应状态码表示服务器理解请求但拒绝授权。
您可能希望查看此thread以了解此错误的可能修复。我还在下面添加了其他可能有助于修复错误的参考资料。
错误码(1020):
Error 1020访问被拒绝是在Cloudflare保护的站点上违反防火墙规则时导致的。如果站点访问者尝试直接访问受保护的端点,则可能会触发此事件。
我碰巧在SO上发现了一个类似的关于错误1020的案例,答案建议根据您的请求添加
UserAgent header
。您可能想尝试这种方法。我还在下面添加了讨论此错误可能修复的网站列表。
参考资料:
免责声明:我不属于所有的网站建议。
https://developers.google.com/apps-script/reference/url-fetch/url-fetch-app
https://developers.google.com/apps-script/reference/url-fetch/http-response
https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/403
错误403可能的修复:
https://support.google.com/chrome/thread/147521409/what-is-403-error?hl=en
https://www.online-tech-tips.com/computer-tips/how-to-fix-403-forbidden-error-on-google-chrome/
https://www.howtogeek.com/357785/what-is-a-403-forbidden-error-and-how-can-i-fix-it/
错误1020可能的修复:
Why curl giving 1020 error while postman giving response
curl 1020 error when trying to scrape page using bash script
https://rockcontent.com/blog/error-1020-access-denied/#:~:text=Wrap%20Up-,What%20is%20Error%201020%20Access%20Denied%3F,an%20endpoint%20that%20is%20protected.
https://www.makeuseof.com/cloudflare-error-1020-access-denied-fix/