首页 > 解决方案 > 使用 argparse 将登录信息传递给 Python 中的请求

问题描述

我正在尝试让 argparse 将登录详细信息从命令行传递给请求。但我收到一个错误:

Traceback (most recent call last):
  File ".\aws_ec2_list_instances_no_output.py", line 811, in <module>
    main()
  File ".\aws_ec2_list_instances_no_output.py", line 733, in main
    write_data_to_confluence(auth, html, pageid, title)
  File ".\aws_ec2_list_instances_no_output.py", line 421, in write_data_to_confluence
    info = get_page_info(auth, pageid)
  File ".\aws_ec2_list_instances_no_output.py", line 416, in get_page_info
    r = requests.get(url, auth = auth)
  File "C:\Users\username\AppData\Roaming\Python\Python37\site-packages\requests\api.py", line 75, in get
    return request('get', url, params=params, **kwargs)
  File "C:\Users\username\AppData\Roaming\Python\Python37\site-packages\requests\api.py", line 60, in request
    return session.request(method=method, url=url, **kwargs)
  File "C:\Users\username\AppData\Roaming\Python\Python37\site-packages\requests\sessions.py", line 519, in request
    prep = self.prepare_request(req)
  File "C:\Users\username\AppData\Roaming\Python\Python37\site-packages\requests\sessions.py", line 462, in prepare_request
    hooks=merge_hooks(request.hooks, self.hooks),
  File "C:\Users\username\AppData\Roaming\Python\Python37\site-packages\requests\models.py", line 317, in prepare
    self.prepare_auth(auth, url)
  File "C:\Users\username\AppData\Roaming\Python\Python37\site-packages\requests\models.py", line 548, in prepare_auth
    r = auth(self)
TypeError: 'dict' object is not callable

在我的程序中,我要去:

parser = argparse.ArgumentParser(description='This is a program that lists the servers in EC2')
parser.add_argument(
"-u",
"--user",
default = getpass.getuser(),
help = "Specify the username to log into Confluence")

parser.add_argument(
"-d",
"--password",
help = "Specify the user's password")
options = parser.parse_args()
html = 'hi'
pageid = 123456789
title = 'hello'
if options.password and options.user:
    user = options.user
    password = options.password
    auth = {user:password}
    write_data_to_confluence(auth, html, pageid, title)

def write_data_to_confluence(auth, html, pageid, title):
    url = '{base}/{pageid}'.format(base = BASE_URL, pageid = pageid)
    r = requests.put(
        url,
        data = data,
        auth = auth,
        headers = { 'Content-Type' : 'application/json' }
        )

我怎样才能auth以正确的格式处理请求?

标签: pythonpython-requestsargparse

解决方案


Requests接受基本身份验证的元组。所以代替你的auth = {user:password}它将与auth = (user, password)


推荐阅读