Автоматизировать генерацию токенов доступа - PullRequest
0 голосов
/ 21 января 2020

Чтобы извлечь данные из частного API, мне нужно сгенерировать токены доступа, используя мой ключ авторизации и учетные данные. Мой текущий код разделен на две части. Первый генерирует токен доступа:

import requests

 url = "https://api.abcdef.com/AuthorizationServer/Token"

 payload = "{\r\n    \"grant_type\" : \"password\",\r\n    \"username\" : \"user@aldfh.com\",\r\n  \"password\" : \"kajshdgfkuyb\",\r\n    \"scope\" : \"API\"\r\n}"

 headers = {
   'Content-Type': 'application/json',
   'Authorization': 'Basic VGFibGVhdV9DaW94QFRhYmxlYXVfQ2lveDo0Ix '
 }

 response = requests.request("POST", url, headers=headers, data = payload)

 print(response.text.encode('utf8'))

Ответ выглядит следующим образом:

    {"access_token":"eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJpY0JVSWQiOjQ1OTg0MjEsIm5hbWUiOiJyYW15YS5nb3RldHlAY2lveGhlYWx0aC5jb20iLCJpc3MiOiJodHRwczovL2FwaS5pbmNvbnRhY3QuY29tIiwic3ViIjoidXNlcjoxNTMyMDI2MiIsImF1ZCI6IlRhYmxlYXVfQ2lveEBUYWJsZWF1X0Npb3giLCJleHAiOjE1Nzk2Mjg1NzcsImlhdCI6MTU3OTYyNDk3OCwiaWNTY29wZSI6IjgiLCJpY0NsdXN0ZXJJZCI6IkMzMSIsImljQWdlbnRJZCI6MTUzMjAyNjIsImljU1BJZCI6MTQ5NiwibmJmIjoxNTc5NjI0OTc4fQ.rEZiMHPsE1inwuWFME1oV_oD54TqkU00-uml3NjCkClW3R-_bVC7A3PxI4zGlJms1rvsZkgO3XX8-1coeV6_jtI-l3nCHixVk2nboepqAspoxT3o9w4vhBhZzvs-TAsqyk4fCrSwwHFXwn8xOMdfrqZqknXHLlVtKlGJg_Uy3bmwEiioocMN3BRZE_269_v5Ez4b94_juUHLPDWye7kS5-8cs4Izsk7HePn-Sm_-FLEqEeb2C09NUGWU8SdyA3EtQhMAiHkU-wN8uQ8wKcWoUfO7WtrSO4zbicFZHgA9Cw",
"token_type":"bearer",
"expires_in":3600,
"refresh_token":"pDYllH2UsVIYq3Pn3Dg==",
"scope":"Api",
"resource_server_base_uri":"https://api-c31.it.com/itAPI/",
"refresh_token_server_uri":"https://api-c31.it.com/AuthorizationServer/Token",
"agent_id":162,
"team_id":24355,
"bus_no":4421}'

Маркер доступа является частью вывода, и я вставляю его в следующий код для генерации Ответ:

def getPerformance():

# api-endpoint 
#Give the specified url ,accessToken
    BASEURL = 'https://api-c31.ict.com/tAPI/'
    accessToken = "{eyJ0eXAiOiJKV1QiLCJhbGciSUzI1NiJ9.eyJpY0JVSWQiOjQ1OTgyYW15YS5nb3RldHlAY2lveGhlYWx0aC5jb20iLCJpc3MiOiJodHRwczovL2FwaS5pbmNvbnRhY3QuY29tIiwic3ViIjoidXNlcjoxNTMyMDI2MiIsImF1ZCI6IlRhYmxlYXVfQ2lveEBUYWJsZWF1X0Npb3giLCJleHAiOjE1Nzk1NjA0MjYsImlhdCI6MTU3OTU1NjgyNywiaWNTY29wZSI6IjgiLCJpY0NsdXN0ZXJJZCI6IkMzMSIsImljQWdlbnRJZCI6MTUzMjAyNjIsImljU1BJZCI6MTQ5NiwibmJmIjoxNTc5NTU2ODI2fQ.JIzsPLK8kg8Zqq_uITeNp6b24xuglcmtjVbD9Ll-ooq943gIILvr_SQ8cTKNl50YMyiX_mu48pupf-D0b-Ntbmb7hYOTNY7tjp8skM8uBDmuSzG1GnVQh3ZotdlofhiEDU9_U4sQsovqdDtXyi5inaoJ95TeBS_YQp_3LSv3pjfXQNWdt1bcn7arHWdIdl6qD5qXm0DhXQArhTr35mViZn-ZxITW4nvEi-gwZz6DdLWuWcW5kTbbzvucroVUPM-dZvzNJvMEruJvriUGl3Y2DSlB5qTLo3JqbLwujsoZfhaxfJ1eAFKd13t6mMenQ5TOwVV3Rg_yp7DfeBbnWcmwtA}"

#Check if accessToken is empty or null
if accessToken != "":

#Give necessary parameters for http request
    payload={'startDate':'1/1/2020', 
    'endDate':'1/6/2020',
    'fields':'"teamId","calls"'}

#add all necessary headers
    header_param = {'Authorization': 'bearer ' + '{accessToken}','content-Type': 'application/x-www-form-urlencoded','Accept': 'application/json, text/javascript, */*'}

# Make get http request
    answer = requests.get(BASEURL + 'services/{version}/g/h' , headers = header_param, params=payload) 


#print response appropriately
    print (answer)

else: print('error')

Моя проблема в том, что мне нужно объединить оба сценария, чтобы можно было автоматизировать процесс.

Ответы [ 2 ]

1 голос
/ 21 января 2020

Попробуйте добавить следующие изменения в первую часть вашего кода, затем с токеном доступа внизу передать его в функцию getPerformance():

#Added json import here

import json
import requests


url = "https://api.abcdef.com/AuthorizationServer/Token"

payload = "{\r\n    \"grant_type\" : \"password\",\r\n    \"username\" : \"user@aldfh.com\",\r\n  \"password\" : \"kajshdgfkuyb\",\r\n    \"scope\" : \"API\"\r\n}"

headers = {
     'Content-Type': 'application/json',
     'Authorization': 'Basic VGFibGVhdV9DaW94QFRhYmxlYXVfQ2lveDo0Ix '
     }

response = requests.request("POST", url, headers=headers, data = payload)

#Note the changes here

json = response.read()
data = json.loads(json)


accessToken = data['access_token']

Затем, куда бы вы ни вызвали getPerformanceFunction(), вы хотите изменить его на getPerformance(accessToken). Вам также нужно изменить определение функции на это.

0 голосов
/ 21 января 2020

Основываясь на ответе @ Cutter выше, я сделал следующие изменения:

import requests
import json

 url = "https://api.abcdef.com/AuthorizationServer/Token"

 payload = "{\r\n    \"grant_type\" : \"password\",\r\n    \"username\" : \"user@aldfh.com\",\r\n  \"password\" : \"kajshdgfkuyb\",\r\n    \"scope\" : \"API\"\r\n}"

 headers = {
   'Content-Type': 'application/json',
   'Authorization': 'Basic VGFibGVhdV9DaW94QFRhYmxlYXVfQ2lveDo0Ix '
 }

 response = requests.request("POST", url, headers=headers, data = payload)
 testresp = response.text
 data = json.loads(testresp)

# Измените определение функции на:

def getPerformance(data):

# api-endpoint 
#Give the specified url ,accessToken
# =============================================================================
    BASEURL = 'https://api-c31.ict.com/API/'
    accessToken = (data["access_token"])
...