我每天都在使用python脚本运行,以从网络设备(Palo Alto防火墙)备份配置。我正在使用API功能登录设备。由于某些字符未解码,因此出现错误
AttributeError: 'NoneType' object has no attribute 'text'
因此,这是引发错误的代码部分:
r = requests.get('https://%s/api/?type=keygen&user=admin&password=password' %host, verify=False)
密码包含特殊字符,例如“ +”,“ @”。我已经检查了有关Paloalto的kb文章,当我们手动输入HTTPS URL:(https://knowledgebase.paloaltonetworks.com/KCSArticleDetail?id=kA10g000000CliMCAS)时,它们具有解决方案。
他们建议:
例如,如果密码包含特殊字符,例如“#” 和“&”分别使用URL编码%23和%26。
这在我手动输入密码时有效。但是,当在get请求中传递参数时,如何为“ +”(解码值为%2B)的解码值传递参数?
假设密码是p @ ssword +,我们在代码中输入的用于获取请求api网址的密码将是https://192.168.10.1/api/?type=keygen&user=admin&password=p%40ssword%2B
这将给出:
TypeError: not enough arguments for format string
答案 0 :(得分:0)
所以说密码是p @ ssword +,这是我们在代码中输入的 请求api网址将为 https://192.168.10.1/api/?type=keygen&user=admin&password=p%40ssword%2B
如果直接将其用作get
函数的参数,则%40s
和%2B
将被视为string formatting specifiers。
'%'
字符,标志着说明符的开始。
您必须使用另一个%
来使%
字符转义:
'%'
未转换任何参数,因此在 结果。
尝试一下:
url_fmt = "https://%s/api/?type=keygen&user=admin&password=p%%40ssword%%2B"
host = "api"
print(url_fmt % host)
# https://api/api/?type=keygen&user=admin&password=p%40ssword%2B
答案 1 :(得分:0)
使用.format
函数。
"https://{}/api/?type=keygen&user=admin&password=password".format(host)