避免必须显式地包含函数参数

3

我的代码大致如下:

import requests
s = requests.Session()
r = s.get(a, verify=False)
r = s.get(b, verify=False)
r = s.get(c, verify=False)
r = s.get(d, verify=False)
r = s.get(e, verify=False)
r = s.get(f, verify=False)
r = s.get(g, headers={"a":"b"}, verify=False)
r = s.post(h, data={"a","b"},verify=False)

我该如何避免一直需要显式地编写 verify=False 呢?

有点相关:https://dev59.com/HGQn5IYBdhLWcg3wtpBW - timgeb
2个回答

7
在Python的requests中,您可以通过执行以下操作使SSL验证标志持续该会话的整个生命周期。
s.verify = False

更普遍的情况是,当一个函数接受named=value类型的参数时,首先要做的是检查方法签名,看默认值是否是你想要的。如果不是,下一步是看上面是否可以持久化该值(python requests允许这样做)。
第三个选项是创建一个简单的包装器,为所有参数传递合适的值。
def my_get(s, url):
    s.get(url, verify=False)

称为
my_get(s, url)

或者你可以采取雄心勃勃的方式,从库中猴子补丁该类。但是猴子补丁有时会导致意想不到的副作用,因此最好避免使用,除非作为最后的手段。

参考文献:
Session类的verify属性文档
使用可选参数和命名参数。


您的回答文本是重复的。 - user3657941
哦,谢谢。我在编辑的时候似乎有人进行了修改,导致了冲突。 - e4c5
我猜测冲突是由于我添加了文档链接导致的。 - user3657941
你真的想让文档链接与其适用的答案部分相距如此之远吗? - user3657941

4
可以轻松使用partial实现,它是Python的一个内置库functools中的函数。
get_unverified = partial(s.get, verify=False)
post_unverified = partial(s.post, verify=False)
r = get_unverified(a)
r = get_unverified(b)
r = get_unverified(c)
r = get_unverified(d)
r = get_unverified(e)
r = get_unverified(f)
r = get_unverified(g, headers={"a":"b"})
r = post_unverified(h, data={"a","b"})

请注意,如果您希望所有Session实例都像这样运行,则此方法并不是最佳选择。请查看https://dev59.com/HGQn5IYBdhLWcg3wtpBW - timgeb

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接