JavaScript等同于Python对Google提醒的oauth2client POST请求

问题描述 投票:0回答:1

我想将用于Google提醒的开源Python库移植到JavaScript:

https://github.com/jonahar/google-reminders-cli

我已经通过https://developers.google.com/identity/protocols/OAuth2UserAgent移植了授权

我的JavaScript版本:https://github.com/Jinjinov/google-reminders-js

现在我需要移植Python的oauth2client POST请求:

body = {
    '5': 1,  # boolean field: 0 or 1. 0 doesn't work ¯\_(ツ)_/¯
    '6': num_reminders,  # number number of reminders to retrieve
}

HEADERS = {
    'content-type': 'application/json+protobuf',
}

    response, content = self.auth_http.request(
        uri='https://reminders-pa.clients6.google.com/v1internalOP/reminders/list',
        method='POST',
        body=json.dumps(body),
        headers=HEADERS,
    )

我的XMLHttpRequest POST请求返回:

  • HTTP 400-错误的请求-如果我使用'application / x-www-form-urlencoded'
  • HTTP 401-未经授权-如果我使用'application / json'

我的代码(具有授权和访问令牌的完整代码在GitHub上:

function encodeObject(params) {
    var query = [];
    for (let key in params) {
      let val = encodeURIComponent(key) + "=" + encodeURIComponent(params[key]);
      query.push(val);
    }
    return query.join('&');
}

function list_reminders(num_reminders, access_token, callback) {

    var body = {
        '5': 1,  // boolean field: 0 or 1. 0 doesn't work ¯\_(ツ)_/¯
        '6': num_reminders,  // number of reminders to retrieve
    };

    body['access_token'] = access_token;

    //body = JSON.stringify(body);
    body = encodeObject(body);

    var xhr = new XMLHttpRequest();

    xhr.open('POST', 'https://reminders-pa.clients6.google.com/v1internalOP/reminders/list' + '?' + body);
    xhr.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');

    //xhr.open('POST', 'https://reminders-pa.clients6.google.com/v1internalOP/reminders/list');
    //xhr.setRequestHeader('Content-type', 'application/json');

    xhr.onreadystatechange = function (e) {
        if (xhr.readyState === 4 && xhr.status === 200) {
            var content_dict = JSON.parse(xhr.response);

            if (!('1' in content_dict)) {
                console.log('No reminders found');
            }
            else {
                var reminders_dict_list = content_dict['1'];
                var reminders = [];

                for(var reminder_dict of reminders_dict_list) {
                    reminders.push(build_reminder(reminder_dict));
                }

                callback(reminders);
            }
        }
        else if (xhr.readyState === 4 && xhr.status === 401) {
            callback(null);
        }
    }

    //xhr.send(body);
    xhr.send(null);
}
javascript python post google-oauth2
1个回答
0
投票

我试图以相同的方式发送正文和访问令牌。

© www.soinside.com 2019 - 2024. All rights reserved.