我試着用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