在我的主要功能中,我从环境变量中获取API令牌。我应该使用global还是将其作为使用api_token的所有函数的参数传递?
def main():
api_token = os.environ.get('API_TOKEN')
def request_data():
url = 'https://api.example.com/search'
headers = {'Authorization': 'token {}'.format(api_token)
params = {}
r = requests.get(url, params=params, headers=headers)
def update_data():
url = 'https://api.example.com/update'
headers = {'Authorization': 'token {}'.format(api_token)
data = {}
r = requests.put(url, data=json.dumps(data), headers=headers)
答案 0 :(得分:1)
使用类封装请求逻辑怎么样?
def main():
api_token = os.environ.get('API_TOKEN')
api = Api(api_token)
api.request_data()
class Api(object):
def __init__(self, token):
self.token = token
def request_data(self):
url = 'https://api.example.com/search'
header = {'Authorization': 'token {}'.format(self.token)
params = {}
r = requests.get(url, params=params, headers=headers)
def update_data(self):
url = 'https://api.example.com/update'
header = {'Authorization': 'token {}'.format(self.token)
data = {}
r = requests.put(url, data=json.dumps(data), headers=headers)
答案 1 :(得分:0)
在这种情况下,使用requests.Session()
真的很有帮助:
不更新标题的示例:
s = requests.Session() # Start session
resp = s.get("http://httpbin.org/headers")
print(resp.json()["headers"])
哪个输出默认标题:
{'Accept': '*/*', 'Accept-Encoding': 'gzip, deflate', 'Host': 'httpbin.org', 'User-Agent': 'python-requests/2.18.4'}
现在,如果您想添加类似api_token
的内容,则可以使用s.headers.update()
:
s.headers.update({"Auth": "Authkey"})
resp = s.get("http://httpbin.org/headers")
print(resp.json()["headers"])
新输出:
{'Accept': '*/*', 'Accept-Encoding': 'gzip, deflate', 'Auth': 'Authkey', 'Host': 'httpbin.org', 'User-Agent': 'python-requests/2.18.4'}
现在,在开始新的会话之前,添加到标题中的所有内容都会保留!