【问题标题】:How to refer to a variable inside quotes如何引用引号内的变量
【发布时间】:2019-05-05 10:16:37
【问题描述】:

我正在尝试通过 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 方法的字符串参数。

【问题讨论】:

  • 那么session 是字符串吗?
  • @gilch 很抱歉应该说,但是是一个类似于 md5 哈希的字符串。

标签: python database import export


【解决方案1】:

只需使用任何字符串解析包装会话变量,例如.format

temp = svc.call(session, "catalog_product.info({}, 'CM-RC658')".format(session))

【讨论】:

  • 我不知道这是否有效,因为我收到“无效的 API 路径”作为我正在尝试做的事情的响应。 “catalog_product.info”只需要一个会话 ID 和一个产品编号作为响应,所以我不确定它为什么会失败。
  • 如果您想确定,只需打印您的会话值并检查信息。
  • 但是,正如我所见,您的问题似乎来自 URL 路径,即设置 svc 变量 @JakeRankin 的路径
  • 使用我的 URL 路径,我可以登录并获取会话 ID,当我执行“temp = svc.call(session, 'catalog_category.tree')”时,它会返回目录类别树,很多数据的。我只是不确定如何调用除 catalog_category.tree 以外的具有参数的方法。
  • 帮助您解决此问题的唯一方法是从您正在调用的网站检查 API,以确保您进行正确的调用、到正确的端点并使用正确的论据。
【解决方案2】:

试试 f-string。

temp = svc.call(session, f"catalog_product.info({session!r}, 'CM-RC658')")

代理对象没有固定的 API,但取决于您使用的服务。其中一些会支持自省,告诉你如何使用它们。试试

print(svc.system.listMethods())

查看该 API 的可用方法列表。

一旦你知道你想要的人的名字,试试

print(svc.system.methodSignature(foo))

其中foo 是方法名称(尝试作为字符串)。这应该告诉您该方法的有效参数签名。你也可以试试。

print(svc.system.methodHelp(foo))

这可能会提供有关该方法如何工作的更多详细信息。这些系统方法名称是标准的,但并非所有 API 都有。


如果上述自省方法不起作用,则必须仔细阅读文档并进行实验。我不知道您的 API,但我可以尝试猜测其他几种可能有效的形式。试试

temp = svc.call(session, "catalog_product.info", session, 'CM-RC658')

temp = svc.catalog_product.info(session, 'CM-RC658')

【讨论】:

  • 我不知道这是否有效,因为我收到“无效的 API 路径”作为我正在尝试做的事情的响应。 “catalog_product.info”只接受一个会话 ID 和一个产品编号作为响应,所以我不确定它为什么会失败。
  • @JakeRankin 试试内省系统方法。
  • 对此不熟悉,但会调查一下!谢谢。
  • 感谢您扩展您的答案!当我调用 listmethods 时,我得到“['system.listMethods', 'system.methodHelp', 'system.methodSignature', 'system.multicall', 'handlePhpError', 'startSession', 'endSession', 'login', 'call '、'multiCall'、'resources'、'resourceFaults'、'globalFaults']" 作为回报。 MethodHelp 只是给出了一个无用的文本描述。我可以通过 SOAP 和 WSDL 检索方法列表,但我不确定如何通过 XMLRPC 使用这些方法。
  • @JakeRankin methodSignature 应该会告诉你该方法接受哪些参数。
猜你喜欢
  • 2019-12-13
  • 1970-01-01
  • 2015-03-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-03
  • 2014-06-27
  • 2014-12-31
相关资源
最近更新 更多