无法产生 json 响应发出带参数的获取请求
Unable to produce json response issuing get requests with parameters
我正在尝试从 webpage 发出带有适当参数的 get http 请求获取 json 响应,但我得到 403 Forbidden
作为响应。当我在 python 中执行相同操作时,我会相应地得到所需的响应。但是,当我采用以下方法时出现问题:
function capterraScraper() {
var Url = 'https://www.capterra.com/directoryPage/rest/v1/category';
var params = {
'htmlName': '360-degree-feedback-software',
'rbr': 'false',
'countryCode': 'BD'
};
var options = {
'method' : 'GET',
'params' : params,
'headers' : {
'User-Agent': 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36'
}
};
var response = UrlFetchApp.fetch(Url, options);
console.log(JSON.parse(response));
}
How can I make the script produce json response?
根据您的脚本,我认为 params
可能用作查询参数。我测试的时候确认可以获取到JSON数据。但是当我使用Google Apps Script测试URL时,我也确认了403 Forbidden
的错误。幸运的是,当我使用Javascript访问URL时,可以获取JSON数据。因此,在这种情况下,作为一种解决方法,我想提出一种在 Google Apps 脚本端使用 JSON 数据的解决方法。
解决方法的流程如下。
- 打开一个对话框。
- 使用 Javascript 检索 JSON 数据,并将数据 return 发送到 Google Apps 脚本端。
由此,您可以在 Google Apps 脚本中使用 JSON 数据。
示例脚本:
请将以下脚本复制并粘贴到 Google 电子表格的脚本编辑器中,并在脚本编辑器中 运行 main()
。这样,在 Google 电子表格中打开一个对话框并检索 JSON 数据,并且 return 数据到 Google Apps 脚本端。
function main(obj) {
if (!obj) {
var html = HtmlService.createHtmlOutput(`<script>fetch('https://www.capterra.com/directoryPage/rest/v1/category?' + (new URLSearchParams({htmlName: '360-degree-feedback-software',rbr: 'false',countryCode: 'BD'}))).then(response => response.json()).then(res => google.script.run.withSuccessHandler(google.script.host.close).main(res)).catch(err => console.log(err));</script>`);
SpreadsheetApp.getUi().showModalDialog(html, "sample");
return;
}
console.log(obj)
DriveApp.createFile("sample.txt", JSON.stringify(obj));
}
当此示例脚本为 运行 时,检索到的 JSON 数据将保存在根文件夹中的一个文件中。当然,你可以把数据设为obj
.
本脚本中的Javascript如下
<script>
fetch('https://www.capterra.com/directoryPage/rest/v1/category?' + (new URLSearchParams({htmlName: '360-degree-feedback-software',rbr: 'false',countryCode: 'BD'})))
.then(response => response.json())
.then(res => google.script.run.withSuccessHandler(google.script.host.close).main(res))
.catch(err => console.log(err));
</script>
注:
- 此解决方法使用 Google 电子表格上的对话框。所以,不幸的是,在这种情况下,即使这个脚本是来自外部的 运行 和时间驱动的触发器,也无法使用该脚本。请注意这一点。
参考:
我正在尝试从 webpage 发出带有适当参数的 get http 请求获取 json 响应,但我得到 403 Forbidden
作为响应。当我在 python 中执行相同操作时,我会相应地得到所需的响应。但是,当我采用以下方法时出现问题:
function capterraScraper() {
var Url = 'https://www.capterra.com/directoryPage/rest/v1/category';
var params = {
'htmlName': '360-degree-feedback-software',
'rbr': 'false',
'countryCode': 'BD'
};
var options = {
'method' : 'GET',
'params' : params,
'headers' : {
'User-Agent': 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36'
}
};
var response = UrlFetchApp.fetch(Url, options);
console.log(JSON.parse(response));
}
How can I make the script produce json response?
根据您的脚本,我认为 params
可能用作查询参数。我测试的时候确认可以获取到JSON数据。但是当我使用Google Apps Script测试URL时,我也确认了403 Forbidden
的错误。幸运的是,当我使用Javascript访问URL时,可以获取JSON数据。因此,在这种情况下,作为一种解决方法,我想提出一种在 Google Apps 脚本端使用 JSON 数据的解决方法。
解决方法的流程如下。
- 打开一个对话框。
- 使用 Javascript 检索 JSON 数据,并将数据 return 发送到 Google Apps 脚本端。
由此,您可以在 Google Apps 脚本中使用 JSON 数据。
示例脚本:
请将以下脚本复制并粘贴到 Google 电子表格的脚本编辑器中,并在脚本编辑器中 运行 main()
。这样,在 Google 电子表格中打开一个对话框并检索 JSON 数据,并且 return 数据到 Google Apps 脚本端。
function main(obj) {
if (!obj) {
var html = HtmlService.createHtmlOutput(`<script>fetch('https://www.capterra.com/directoryPage/rest/v1/category?' + (new URLSearchParams({htmlName: '360-degree-feedback-software',rbr: 'false',countryCode: 'BD'}))).then(response => response.json()).then(res => google.script.run.withSuccessHandler(google.script.host.close).main(res)).catch(err => console.log(err));</script>`);
SpreadsheetApp.getUi().showModalDialog(html, "sample");
return;
}
console.log(obj)
DriveApp.createFile("sample.txt", JSON.stringify(obj));
}
当此示例脚本为 运行 时,检索到的 JSON 数据将保存在根文件夹中的一个文件中。当然,你可以把数据设为
obj
.本脚本中的Javascript如下
<script> fetch('https://www.capterra.com/directoryPage/rest/v1/category?' + (new URLSearchParams({htmlName: '360-degree-feedback-software',rbr: 'false',countryCode: 'BD'}))) .then(response => response.json()) .then(res => google.script.run.withSuccessHandler(google.script.host.close).main(res)) .catch(err => console.log(err)); </script>
注:
- 此解决方法使用 Google 电子表格上的对话框。所以,不幸的是,在这种情况下,即使这个脚本是来自外部的 运行 和时间驱动的触发器,也无法使用该脚本。请注意这一点。