javascript - 如何使用 Oauth1 库发送带有重复参数 header 的 GET 请求?

标签 javascript google-apps-script

第一次发帖,但多年来我找到了很多解决方案,所以感谢提供帮助的人。

我正在尝试使用 OAuth1.0 从 Google-apps-script 向 API 发送 GET 请求,其中多个参数共享相同的名称。

有没有办法使用 OAuth1 库来做到这一点? (link)

我设法让它使用单个参数名称。

var get_documents_params = [
["Name","value"],
['OtherName','value'],
];

以下具有重复参数名称的代码会出现错误“提供的身份验证无效:签名无效”。 当使用 postman 时,API 可以接收与我的请求相同的名称参数。

var service = getService();


var get_documents_params = [
["SameName","value1"],
['SameName','value2'],
];

var url = "https://the_API_url.com";


var query_params = '?';


query_params += encodeURIComponent(get_documents_params[0][0]) + '=' + encodeURIComponent(get_documents_params[0][1]) + '&';

query_params += encodeURIComponent(get_documents_params[1][0]) + '=' + encodeURIComponent(get_documents_params[1][1]);

var params = {
    'method': 'GET', 
    'Accept':'application/json',
    'muteHttpExceptions' : true
    };

  var response = service.fetch(url+query_params, params);


________

Logger.log(url+query_params);
// shows : "https://the_API_url.com?SameName=value1&SameName=value2"
_________


function getService() {
  return OAuth1.createService('API_GET')
      // Set the consumer key and secret.
      .setConsumerKey(CONSUMER_KEY)
      .setConsumerSecret(CONSUMER_SECRET)

      .setAccessToken(TOKEN, TOKEN_SECRET);

}
<小时/>

postman 设置

GET https://the_API_url.com?SameName=value1&SameName=value2
HTTP/1.1
Accept: application/json
Authorization: OAuth 
oauth_consumer_key="consumer_key",oauth_token="consumer_token",oauth_signature_method="HMAC-SHA1",oauth_timestamp="1572334760",oauth_nonce="XXXXX",oauth_version="1.0",oauth_signature="XXXXX"
User-Agent: PostmanRuntime/7.19.0
Cache-Control: no-cache
Postman-Token: XXXXXX
Host: the_API_url.com
Accept-Encoding: gzip, deflate
Cookie: ajs_anonymous_id=XXXXX; mp_a6b59f6f7db3f0bbdef2c0450a4b4694_mixpanel=%7B%22distinct_id%22%3A%20%2216d9174a2537c6-0ccd361fcb3648-6a40291d-1fa400-16d9174a25460e%22%2C%22%24initial_referrer%22%3A%20%22%24direct%22%2C%22%24initial_referring_domain%22%3A%20%22%24direct%22%7D
Connection: keep-alive
<小时/>

我希望收到一个 JSon 对象,因为它在使用一次参数名称发送请求时起作用。

最佳答案

函数 service.fetch() 似乎只接受一次使用的参数名称,因为“url”参数通过库 OAuth1.0 被解释为一个对象。对象会覆盖多次使用的每个名称。

关于javascript - 如何使用 Oauth1 库发送带有重复参数 header 的 GET 请求?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58592907/

相关文章:

javascript - 防止 NVD3 图表轴出现负值

asp.net - 使用Asp.net注入(inject)javascript

javascript - 如何根据附加电子表格中的列自动填充表单选项

javascript - 加速 Google 脚本中的 onEdit 功能 - 有时无响应

go - 调用 Google Apps 脚本

javascript - 如何在 window.open 函数中写一个 javascript 变量

javascript - 旋转后将图像放入div

javascript - 如何使用具有平滑过渡的CSS在其位置垂直翻转图像?

google-apps-script - 我无法在谷歌云平台上创建 OAuth 2.0 客户端 ID

javascript - How do I edit scopes?//Google Classroom control permission scopes in google apps scripts for student access 权限范围