我尝试ZPublisher.Client.call
使用method
参数调用 Zope 2.10.9 来设置 HTTP 方法(GET
、POST
等),但它没有按预期工作:它总是发送一个 POST 请求。如果我不提供method
参数,它总是发送一个 GET 请求。
申请代码:
Client.call(
'http://...',
username = 'jdoe',
password = 'mypw',
method = 'GET')
我在Client.py中对其进行了一些跟踪:
def call(url,username=None, password=None, **kw):
return apply(Function(url,username=username, password=password), (), kw)
好的,所以kw = { 'method': 'GET' }
。据我所知,这转化为
Function.__init__(
'http://...',
username = 'jdoe',
password = 'mypw'
).__call__(
method = 'GET')
Function.__init__
期望method
作为其参数的一部分,但它没有在那里传递:
def __init__(self,url,
arguments=(),method=None,username=None,password=None,
timeout=None,
**headers):
...
if method is not None: self.method=method
Function.__call__
预计method
已经设置:
def __call__(self,*args,**kw):
method=self.method
应该修改call
签名和apply
调用以适应__init__
,还是我误解了什么?如果它真的是一个错误,这里有一个建议的补丁(Works For Me™):
--- Client.py.orig
+++ Client.py
@@ -271,9 +271,9 @@
return f
-def call(url,username=None, password=None, **kw):
+def call(url, arguments=(), method=None, username=None, password=None, timeout=None, **kw):
- return apply(Function(url,username=username, password=password), (), kw)
+ return apply(Function(url, arguments=arguments, method=method, username=username, password=password, timeout=timeout), (), kw)
##############################################################################
# Implementation details below here
错误报告。