我正在尝试通过XMLRPC调用API,以请求有关产品的信息。
我有一个会话变量,该变量包含我登录后的会话密钥。
我必须将我的调用作为参数传递给另一个调用,至少这是我发现它起作用的唯一方法。
例如:
import xmlrpc.client
svc = xmlrpc.client.ServerProxy('https://example.com/api/xmlrpc/')
session = svc.login('apiuser', 'apikey')
temp = svc.call(session, 'catalog_category.tree')
print (temp)
这很好。
我现在要做什么:
import xmlrpc.client
svc = xmlrpc.client.ServerProxy('https://example.com/api/xmlrpc/')
session = svc.login('apiuser', 'apikey')
temp = svc.call(session, "catalog_product.info(session, 'CM-RC658')")
显然这是不正确的。我的问题是我不确定如何将会话变量传递给catalog_product.info过程,该过程是svc.call方法的字符串参数。
答案 0 :(得分:2)
只需使用任何字符串解析(例如.format
)包装会话变量:
temp = svc.call(session, "catalog_product.info({}, 'CM-RC658')".format(session))
答案 1 :(得分:1)
尝试f弦。
search text
another text
代理对象没有设置的API,但取决于您使用的服务。其中一些将支持自省以告诉您如何使用它们。试试
temp = svc.call(session, f"catalog_product.info({session!r}, 'CM-RC658')")
查看该API可用方法的列表。
一旦知道了想要的名字,就尝试
print(svc.system.listMethods())
print(svc.system.methodSignature(foo))
是方法名称(尝试作为字符串)。这应该告诉您该方法的有效参数签名。您也可以尝试。
foo
可能会提供有关该方法如何工作的更多详细信息。这些系统方法名称是标准名称,但并非所有API都具有它们。
如果上述自省方法不起作用,则必须仔细阅读文档和实验。我不知道您的API,但是我可以尝试猜测其他几种可行的形式。试试
print(svc.system.methodHelp(foo))
和
temp = svc.call(session, "catalog_product.info", session, 'CM-RC658')