我对API很陌生。我已经成功地在邮递员中构建了一个 API,并获得了我想要的数据。我以 JavaScript 格式生成了 postman 提供的代码示例:
var myHeaders = new Headers();
myHeaders.append("Content-Type", "application/x-www-form-urlencoded");
myHeaders.append("Authorization", "Basic ZGVhbGdwwitpflgnBvcnQ6ZldZUmZvVEU5a2hNaFZtUlBlcU1VZ3J5eFRhWXBwN0U3d1hdllBZw==");
var urlencoded = new URLSearchParams();
urlencoded.append("grant_type", "password");
urlencoded.append("username", "123456789");
urlencoded.append("password", "password123!");
var requestOptions = {
method: 'POST',
headers: myHeaders,
body: urlencoded,
redirect: 'follow'
};
fetch("https://accounts.kernel.com/oidc/token", requestOptions)
.then(response => response.text())
.then(result => console.log(result))
.catch(error => console.log('error', error));
但是,我想使用函数UrlFetchApp在Google脚本中构建此API。到目前为止,我正在这样做:
function webRelay(){
var url = 'https://accounts.autoscout24.com/oidc/token';
var username = "123456789";
var password = "password123!";
var headers =
{
"Content-Type" : "application/x-www-form-urlencoded" ,
"Authorization" : "Basic ZGVhbGdwwitpflgnBvcnQ6ZldZUmZvVEU5a2hNaFZtUlBlcU1VZ3J5eFRhWXBwN0U3d1hdllBZw=="
}
var options =
{
"grant_type" : "password",
"timeout": 0,
"method" : "post",
"headers": headers
};
// Getting "bad request" here - check the username & password
var result = UrlFetchApp.fetch(url, options);
var state=result.getContentText();
}
但是我收到以下错误:
请求失败 https://accounts.kernel.com 返回代码 400。 截断的服务器响应:{"错误":"invalid_request"}(使用 muteHttpExceptions 选项用于检查完整响应((第 22 行,文件 "API"(
- 你想把问题中的Javascript转换为Google Apps Script。
- 你已经确认你的Javascript工作了。
我可以像上面一样理解。为此,以下修改怎么样?
修改点:
- 在 UrlFetchApp.fetch(url, options(
options
, there are no properties of
grant_typeand
超时'. - 当你看到你的Javascript时,数据将作为表单数据发送。
- UrlFetchApp 的默认"内容类型"是
application/x-www-form-urlencoded
。 - 在脚本中,不使用
username
。
当上述几点反映到脚本中时,它将变为如下。
修改后的脚本:
在使用修改后的脚本之前,请先设置username
、password
、headers
的变量。
function webRelay(){
var url = 'https://accounts.autoscout24.com/oidc/token';
var username = "123456789";
var password = "password123!";
var payload = {
"grant_type": "password",
"password": password,
"username": username
}
var headers = {"Authorization" : "Basic ###"};
var options = {
"method" : "post",
"headers": headers,
"payload": payload,
};
var result = UrlFetchApp.fetch(url, options);
var state = result.getContentText();
Logger.log(state)
}
- 在此修改后的脚本中,您的令牌已使用
###
删除。当您使用它时,请对其进行修改。
参考:
- 类网址获取应用
虽然我认为上面的请求 ob 修改后的脚本与您的 Javascript 相同。但不幸的是,我无法测试上面的脚本。对此,我深表歉意。因此,如果这对您的情况不起作用,我深表歉意。