· 4 years ago · Apr 13, 2021, 09:52 PM
1# Imports
2import requests
3from requests.auth import HTTPBasicAuth
4import base64
5
6# Variables
7URL = 'http://dev.web.local'
8REQUEST_RETRIES = 3
9WAIT_FOR_RETRY = 1
10USERNAME = 'cisco'
11PASSWORD = '1234QWer'
12
13## Send request
14def send_request(url, data, headers):
15 tries = 0
16 while True:
17 tries += 1
18 try:
19 response = requests.post(url=url, json=data, headers=headers)
20 #response = requests.post(url=url, None=None, headers=headers)
21
22 # Everything ok?
23 if response:
24 return response.json()
25
26
27 # Raise HTTP error if occurs
28 response.raise_for_status()
29
30
31 # Network timeout, should we retry?
32 except requests.ConnectTimeout:
33 if tries < REQUEST_RETRIES:
34 continue
35 else:
36 raise
37
38# Encode string to base64
39def to_base64(s):
40 return base64.b64encode(s.encode('utf8')).decode('utf8')
41
42## Basic auth
43def basic_auth():
44 url = URL + '/login'
45 creds = to_base64(f'{USERNAME}:{PASSWORD}')
46 headers = {'Authorization': f'Basic {creds}'}
47 response = send_request(url, None, headers)
48 print(response)
49 return response.get('key')
50
51## API Key auth
52def invoke_info_v1(api_key, name):
53 url = URL + '/v1/info'
54 data = { 'name' : name }
55 headers = { 'x-api-key' : api_key }
56 response = send_request(url, data, headers)
57 print(response)
58 #return response.get('')
59
60## Bearer token
61def invoke_info_v2(bearer_token, name):
62 url = URL + '/v2/info'
63 data = {'name' : name}
64 headers = {'Authorization:' : f'Bearer {bearer_token}'}
65 response = send_request(url, data, headers)
66 print(response)
67
68if __name__ == '__main__':
69 print('Basic Auth')
70 api_key = basic_auth()
71
72 print('------------------------------------------')
73
74 print('API Key Auth')
75 bearer_token = invoke_info_v1(api_key, '')
76
77 print('------------------------------------------')
78
79 print('Bearer Token Auth')
80 invoke_info_v2(bearer_token, 'World!')