我目前正在从事一个项目,并且一直遇到障碍。 假设我有要求。
requests.post("url.com", headers=headers)
我将如何做到这样一个人可以控制标题? 例如,一个人怎么能在不打开文件并进行更改的情况下将另一个值添加到标头字典中?我的意思是从命令行。您将能够在执行过程中告诉程序“这些是我想要的标头。”
答案 0 :(得分:2)
您可以使用optparse从命令行解析参数:
from optparse import OptionParser
parser = OptionParser()
parser.add_option("-h", "--headers", dest="headers", help="Specify the headers using the syntax: <header_name>=<value>,<header_name>=<value>,...", type="str", default=None)
(options, args) = parser.parse_args()
headers = options.headers
此时,header
是由逗号分隔的标题字符串。要分别获取每个标头,请执行以下操作:
headers = headers.split(',')
headers_dict = {}
for h in headers:
key, value = h.split('=')
headers_dict[key] = value
然后,您通过命令行将标头传递为:
python3 program_name.py -h header_1=value_1,header_2=value_2
答案 1 :(得分:0)
您可以将标头保存在外部JSON文件中,例如:
{
"header_1": "header value",
"header_2": "header value 2"
}
然后仅在需要构建请求时加载它,即:
import json
with open("path/to/your/headers.json", "r") as f:
headers = json.load(f)
requests.post("url.com", headers=headers)
更新:如果要通过命令行控制标题,最基本的方法是使用sys.argv
列表访问CLI参数,例如,如果您以python script_name.py header1=value_1 header2=value_2
的形式调用脚本,您可以将其转换为dict,例如:
import sys
if len(sys.argv) > 1: # ensure that we at least have some arguments
headers = dict(x.split("=") for x in sys.argv[1:])
requests.post("url.com", headers=headers)
else:
print("At least one header required.") # or whatever you want in that case...
但是,如果您正在寻找更健壮的CLI处理方式,建议您检查内置的argparse
模块。
答案 2 :(得分:0)
如果要从命令行传递标题,可以执行以下操作:
?
,然后通过传递标头名称和值来调用它,例如:import sys
headers = dict([header.split('=', 1) for header in sys.argv[1:]])
request.post("url.com", headers)