我试着用method
参数调用Zope 2.10.9的ZPublisher.Client .call
来设置HTTP方法(GET
,POST
等),但它不能按预期工作:它总是发送POST请求。如果我不提供method
参数,它总是发送一个GET请求。如何使用ZPublisher.Client.call设置HTTP方法?
施药代码:
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)
OK,所以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__
,还是我误解了一些东西?如果它是一个真正的错误,这里有一个建议的补丁(对我的作品™):
--- 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
+1我创建了一个bug报告,如OP所述。 – l0b0 2013-03-18 09:29:16