gpt4 book ai didi

google-apps-script - 如何将具有基本授权的 UrlFetchApp 分配给按钮?

转载 作者:行者123 更新时间:2023-12-04 02:52:06 29 4
gpt4 key购买 nike

我在 Google Apps Script 中创建了函数,当我在 Google Apps Script 中运行它时效果很好。输出数据返回到 Google 表格。

function testFunction11() {
var rng = SpreadsheetApp.getActiveRange();
var encodedAuthInformation = Utilities.base64Encode("username:key");
var headers = {"Authorization" : "Basic " + encodedAuthInformation};
var params = {
'method': 'GET',
'muteHttpExceptions': true,
'headers': headers
};
var res = UrlFetchApp.fetch("https://api.apiservice.com/api/v1/xxx?fields=somefields", params);
Logger.log(res.getContentText());
rng.setValue(res);
}

单元格中的输出:
[
{
"id": xxx,
"createdDate": "2019-02-01T04:54:00Z",
"reference": "XXX"
},
etc

然后我将脚本分配给按钮“testFunction11”。
当我点击按钮时,它返回
{
"message": "An error has occurred."
}

它看起来像来自 API 服务器的响应。

我唯一的假设是 google sheet 的按钮添加了一些 headers,User-Agent 或 content-type 来请求,这在 API 服务器中是不允许的。经过一番搜索,我想我无法在请求中重新分配 User-Agent。这是对的还是我做错了?

编辑 1:

每个案例的标题 console.log(UrlFetchApp.getRequest(url, params)) :
单击电子表格中的按钮时:
{headers={Authorization=Basic XXXXXXXXQVU6MWVhODlmZmFkN2U3NGNjOGJkOTc1YTE1ZjVhNTE3MzE=, X-Forwarded-For=178.xx.my.ip}, method=get, payload=, followRedirects=true, validateHttpsCertificates=true, useIntranet=false, contentType=null, url=https://api.apisite.com/api/v1/SalesOrders?fields=Id,Createddate,Reference&where=Createddate%3E2019-02-01T00:00:00Z}

对于脚本:
{headers={Authorization=Basic XXXXXXXXQVU6MWVhODlmZmFkN2U3NGNjOGJkOTc1YTE1ZjVhNTE3MzE=}, method=get, payload=, followRedirects=true, validateHttpsCertificates=true, useIntranet=false, contentType=null, url=https://api.apisite.com/api/v1/SalesOrders?fields=Id,Createddate,Reference&where=Createddate%3E2019-02-01T00:00:00Z}

所以按钮只添加了 X-Forwarded-For .

当我尝试手动添加 X-Forwarded-For: 'unknown'有这样的错误
There are attribute with impossible value: Header:X-Forwarded-For

俄文错误文本,很抱歉可能翻译不准确。这很有趣,因为当我添加 Test: unknown 时同样,没有错误,但显然不起作用。看起来谷歌不允许更改此值。

将在 postman 中尝试不同的标题,并可能确认此标题是导致错误的原因。谢谢@TheMaster

编辑 2:

我通过 postman 尝试了不同的标题。所以,结果是当我添加到标题 X-Forwarded-For键为任意值,返回 "message": "An error has occurred."当我不添加此键时,它运行良好。

因此,问题是通过 Google Apps Script 禁用添加此 header 的任何方法。好像没有。

最佳答案

  • 在你的情况下,当 UrlFetchApp.fetch()从电子表格上的按钮运行,X-Forwarded-For会自动添加到标题中。
  • 已添加 X-Forwarded-For到标题,An error has occurred. 的错误发生。
  • 另一方面,X-Forwarded-For未在 header 中使用,不会发生错误。

  • 如果我的理解是正确的,这个解决方法如何?我认为可能有几种解决方法。因此,请将此视为其中之一。在此变通方法中,Web 应用程序用作包装器函数。

    示例脚本:

    首先,请复制并粘贴以下脚本。并请设置 testFunction11()到按钮。当 testFunction11()正在运行, testFunction11()对 Web Apps 的请求 ( doGet() ),以及对 https://api.apiservice.com/api/v1/xxx?fields=somefields 的 Web Apps 请求.至此, X-Forwarded-For不习惯请求头。然后,返回 Web Apps 的结果并将值放入电子表格。 请在运行脚本之前部署 Web 应用程序。
    function testFunction11() {
    var rng = SpreadsheetApp.getActiveRange();
    var url = ScriptApp.getService().getUrl();
    var params = {method: "get", headers: {Authorization: "Bearer " + ScriptApp.getOAuthToken()}};
    var res = UrlFetchApp.fetch(url, params);
    Logger.log(res.getContentText());
    rng.setValue(res);
    }

    function doGet() {
    var url = "https://api.apiservice.com/api/v1/xxx?fields=somefields";
    var encodedAuthInformation = Utilities.base64Encode("username:key");
    var headers = {"Authorization" : "Basic " + encodedAuthInformation};
    var params = {
    'method': 'GET',
    'muteHttpExceptions': true,
    'headers': headers
    };
    var res = UrlFetchApp.fetch(url, params);
    return ContentService.createTextOutput(res.getContentText());
    }

    部署 Web 应用程序:

    在运行此脚本之前,请部署 Web 应用程序。
  • 在脚本编辑器上
  • 发布 -> 部署为 Web 应用程序
  • 创建新项目版本
  • 在“执行应用程序”中,选择“我”
  • 在“谁有权访问该应用程序”中,
  • 如果该功能仅供您使用,请选择“仅限我自己”。
  • 如果该功能由多个用户使用,请选择“任何人”。
  • 点击“部署”
  • 复制“当前 Web 应用程序 URL”
  • 点击“确定”

  • 笔记:
  • 修改脚本时,请将 Web Apps 重新部署为新版本。这样,最新的脚本就会反射(reflect)到 Web Apps 中。 这是很重要的一点。
  • 这是一个简单的示例脚本。所以请根据您的情况进行修改。

  • 引用:
  • Web Apps
  • Taking advantage of Web Apps with Google Apps Script
  • 关于google-apps-script - 如何将具有基本授权的 UrlFetchApp 分配给按钮?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54615750/

    29 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com