Я пытаюсь проанализировать пользовательскую переменную локализации либо в заголовке, либо в полезной нагрузке JSON, а затем получить значение этой пользовательской переменной на стороне сервера, чтобы выполнить некоторые действия в зависимости от ее значения.
Некоторые варианты request.headers.get уже пробовали:
locale = request.headers.get(u"Locale", "None")
locale = request.headers[u"Locale"]
locale = request.get_json()[u"Locale"]
Код на стороне клиента (код скрипта Google Apps). «Locale» - это пользовательская переменная, которую я пытаюсь проанализировать:
function queryDb2(query) {
Session.getEffectiveUser().getEmail();
var params = {
'method': 'POST',
'validateHttpsCertificates': false,
'muteHttpExceptions': true,
'contentType': 'application/json',
'headers': {"Authorization": "Bearer " + ScriptApp.getOAuthToken(), "Locale": SpreadsheetApp.getActive().getSpreadsheetLocale()},
'payload': JSON.stringify({'query': query, 'Locale': SpreadsheetApp.getActive().getSpreadsheetLocale()})
};
var result = UrlFetchApp.fetch(getServicesAppDb2Url(), params);
return JSON.parse(result);
}
Код на стороне сервера (Python с использованием Flask).
def db2():
try:
# make sure the request is valid
if request.get_json().get(u"query", False) and request.headers.get('Authorization', False):
query = request.get_json()[u"query"]
token = request.headers[u"Authorization"][7:] # [7:] to remove the "Bearer " string before the token.
locale = request.headers.get(u"Locale", "None") # Gets the language of the user who queries
# make sure the domain of the user who queries the API is allowed.
if auth.is_token_valid(token):
# connect to the database
connection = db.get_odbc_connection()
# run query
logging.info(query)
logging.info(locale)
data = db.query_db(connection, query)
# format data
js = json.dumps(data)
return Response(js, status=200, mimetype='application/json')
else:
logging.error("Auth with token failed.")
return Response("Token is not valid.", status=401, mimetype='text/plain')
else:
logging.error("The request received is not valid. It either miss body data (query) or auth header")
return Response("Invalid request.", status=400, mimetype='text/plain')
except Exception:
logging.error(u"An exception has been raised. Stacktrace: {}".format(traceback.format_exc()))
return Response("An internal server error occured. Please contact the server administrator and inform them of"
" the time the error occured. ERROR: {}".format(traceback.format_exc()),
status=500, mimetype='text/plain')