Как отправить запрос GET с библиотекой Oauth1 с дубликатами заголовков параметров? - PullRequest
1 голос
/ 28 октября 2019

Первый раз, но я нашел много решений за эти годы, так что спасибо людям, которые предоставляют помощь.

Я пытаюсь отправить запрос GET с OAuth1.0 в API из Google-приложений-скрипт с несколькими параметрами с одинаковыми именами.

Есть ли способ сделать это с помощью библиотеки OAuth1? ( ссылка )

Мне удалось заставить его работать с одиночными именами параметров.

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

Следующий код с повторяющимся именем параметра выдает ошибку "Поставленная аутентификацияНедопустимая подпись ". 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);

}

Настройки почтальона

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, как он работает при отправке запроса с однократным использованием имен параметров.

1 Ответ

0 голосов
/ 30 октября 2019

Кажется, что функция service.fetch () принимает имя параметра только один раз, так как параметр 'url' интерпретируется как объект через библиотеку OAuth1.0. Объект перезаписывает каждое имя, которое используется более одного раза.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...