UrlFetchApp Google Scripts VS Node Fetch
Posted
技术标签:
【中文标题】UrlFetchApp Google Scripts VS Node Fetch【英文标题】: 【发布时间】:2021-04-10 11:58:49 【问题描述】:我在使用 Google Scripts 上的 UrlFetchApp 执行简单的 POST 请求时遇到了一些问题。
此代码在带有 node-fetch lib 的 NodeJS 上运行良好。
const fetch = require('node-fetch');
const URL = "https://login.XXXXXXXXXXXXX.com.br/api/login"
fetch(URL,
"body": "'my_json_data': 'login data'",
"method": "POST",
).then(res => res.text())
.then(body => console.log(JSON.parse(body)));
在使用 UrlFetchApp 的 Google Scripts 项目上的相同请求给了我一个 403 Forbidden HTTP 错误。
var url = 'https://login.XXXXXXXXX.com.br/api/login';
var data =
'email':'EMAIL',
'password':'PASS'
var options =
method: 'POST',
payload: JSON.stringify(data)
var response = UrlFetchApp.fetch(url, options);
Logger.log(response)
我在这里错过了什么?
编辑:已尝试使用有效负载。
【问题讨论】:
【参考方案1】:我相信你的目标如下。
您希望将以下 Node.js 脚本转换为 Google Apps 脚本。
const fetch = require('node-fetch');
const URL = "https://login.XXXXXXXXXXXXX.com.br/api/login"
fetch(URL,
"body": "'my_json_data': 'login data'",
"method": "POST",
).then(res => res.text())
.then(body => console.log(JSON.parse(body)));
修改点:
在您的 Node.js 脚本中,"'my_json_data': 'login data'"
的数据作为text/plain
发送到data
。所以在这种情况下,当使用 UrlFetchApp 时,需要设置内容类型。因为不设置内容类型时,数据以form-data
发送。
当以上几点反映到你的脚本中时,它变成如下。
修改脚本:
从:var options =
method: 'POST',
payload: JSON.stringify(data)
到:
var options =
method: 'POST',
payload: JSON.stringify(data),
contentType: "text/plain"
如果contentType: "text/plain"
出现错误,请修改为contentType: "text/plain;charset=UTF-8"
。
虽然我不确定您的 API 规范,但我认为contentType: "application/json"
可能也可以使用。但这是我的猜测。
参考:
Class UrlFetchApp【讨论】:
以上是关于UrlFetchApp Google Scripts VS Node Fetch的主要内容,如果未能解决你的问题,请参考以下文章
在 Google 脚本中: UrlFetchApp.fetch(''https://accounts.spotify.com/api/token'') 返回代码 405
UrlFetchApp Google Scripts VS Node Fetch
如何在 Google Apps 脚本中向 UrlFetchApp 添加 API 密钥
Discord API 告诉我:“401:未经授权”,当我使用 Google 脚本进行 GET 时:“UrlFetchApp.fetch()”