请求失败返回代码 400.截断的服务器响应 - 谷歌脚本



我对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 ofgrant_typeand超时'.
  • 当你看到你的Javascript时,数据将作为表单数据发送。
  • UrlFetchApp 的默认"内容类型"是application/x-www-form-urlencoded
  • 在脚本中,不使用username

当上述几点反映到脚本中时,它将变为如下。

修改后的脚本:

在使用修改后的脚本之前,请先设置usernamepasswordheaders的变量。

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 相同。但不幸的是,我无法测试上面的脚本。对此,我深表歉意。因此,如果这对您的情况不起作用,我深表歉意。

相关内容

  • 没有找到相关文章

最新更新