标签: xml-rpc

XML-RPC 方法可以在 Python 中按名称(作为字符串)调用吗?

在 python 中,调用 XML-RPC 方法涉及调用代理对象上的方法:

from xmlrpclib import ServerProxy
print ServerProxy('https://example.com/rpc').api.hello_there('John')
Run Code Online (Sandbox Code Playgroud)

在其他一些语言中,例如 perl,您可以将方法名称作为方法参数传递。

use Frontier::Client;
$p = Frontier::Client->new(url => 'https://example.com/rpc');
$result = $p->call('api.hello_there', 'John');
print $result;
Run Code Online (Sandbox Code Playgroud)

有没有办法在 Python 中按名称(作为字符串)调用 XML-RPC 方法?

python xml-rpc xmlrpclib call getattr

5
推荐指数
1
解决办法
1579
查看次数

使用 ZeroMQ 构建点对点工作负载调度器有帮助吗?

我正在编写工作负载调度程序。我希望我的软件是一个点对点调度程序,即。一个节点只知道一些邻居(其他节点)并使用它们到达其他节点。

每个节点都有自己的加权路由表来向其他对等点发送消息(基本上基于跳数),即。“我希望主人给我我的时间表”或“节点 B 上的资源 A 是否可用?” :哪个邻居离我的目标最近?

例如,我使用XML-RPC( xmlrpc-c) 和std::multimaps/编写了自己的路由协议std::maps

我正在考虑使用ZeroMQ来优化我的数据流:

  • 排队可以减少peer之间的网络负载;
  • 订阅可用于发布升级。

作为结果 :

  • 我需要打开与创建新类型连接一样多的套接字;
  • 每个节点都需要是一个客户端、一个服务器、一个发布者、一个订阅者、一个代理和一个目录;
  • 我不确定我的“点对点架构”是否与 ZeroMQ 的主要目的兼容。

您认为这ZeroMQ是一个有用的概念吗?

c++ routing scheduling xml-rpc zeromq

5
推荐指数
1
解决办法
1430
查看次数

如何使用 XML-RPC.NET 为方法定义可选参数

我正在使用XML-RPC.NET 库在 C# 中开发 XML-RPC 服务。该服务将用于向 Tapatalk 用户公开论坛

Tapatalk API 文档说明应该实现哪些方法。有时参数被指定为可选。

例如get_topic有 4 个参数:forum_id, start_num,last_nummode

该方法由 Tapatalk 应用程序使用所有参数或仅前 3 个参数调用(因此mode省略)。

我定义的方法如下:

[XmlRpcMethod("get_topic"]
public GetTopicResult GetTopic(string forum_id, int? start_num, int? last_num, string mode)
    
Run Code Online (Sandbox Code Playgroud)

当使用指定的所有 4 个参数调用该方法时,一切顺利。当mode省略时,我收到以下错误:Request contains too few param elements based on method signature.

将 mode 指定为可选参数似乎并不能解决问题:

[XmlRpcMethod("get_topic"]
public GetTopicResult GetTopic(string forum_id, int? start_num, int? last_num, string mode = "")
Run Code Online (Sandbox Code Playgroud)

尝试重载该方法会导致此错误: Method GetTopic in type …

c# xml-rpc xml-rpc.net

5
推荐指数
1
解决办法
1191
查看次数

Python xmlrpclib 在传输时将 datetime 对象更改为 DateTime 实例

使用 Python 2.6.x 的 xmlrpclib 在客户端和服务器之间交换的消息在服务器端创建了一种“实例”类型,而不是“日期时间”类型。在客户端,我创建了一个新的

updateTime = datetime(year, month, day, hour, minute, second)
print type(updateTime)
print updateTime
Run Code Online (Sandbox Code Playgroud)

结果是

<type 'datetime.datetime'>
2015-10-07 10:21:52
Run Code Online (Sandbox Code Playgroud)

发送时,字典在客户端看起来像这样:

'updateTime': datetime.datetime(2015, 10, 7, 10, 21, 52)
Run Code Online (Sandbox Code Playgroud)

但是服务器端的传入字典是这样的:

'updateTime': <DateTime '20151007T10:21:52' at 7f4dbf4ceb90>
Run Code Online (Sandbox Code Playgroud)

打印类型及其字符串表示如下:

<type 'instance'>
20151007T10:21:52
Run Code Online (Sandbox Code Playgroud)

我们正在使用 xmlrpclib.ServerProxy 但将use_datetime更改为TrueFalse根本没有任何区别。

xmlrpclib.ServerProxy('https://'+rpc_server_addr, allow_none=True, use_datetime=True)
Run Code Online (Sandbox Code Playgroud)

为什么会这样?我也希望接收方有一个 tpye 'datetime.datetime'。

python datetime xml-rpc xmlrpclib python-datetime

5
推荐指数
1
解决办法
1084
查看次数

类型错误:需要类似字节的对象,而不是“二进制”

xmlrpc.server用来构建服务器并pickle.dumps()用来腌制一些数据。然后我xmlrpc.client用来构建一个客户端并pickle.loads()用来解开这些数据。

## server
server = SimpleXMLRPCServer(('0.0.0.0', 5005), allow_none=True)
# in _dispatch method:
result = perform_stuff()
return pickle.dumps(result)

## client
proxy = ServerProxy(f'http://{host}:{port}', allow_none=True)
result = proxy.make_rpc()
return pickle.loads(result.data)
Run Code Online (Sandbox Code Playgroud)

但是,我解决了以下问题:

我不知道类似字节的对象和“二进制”之间的区别

我尝试使用 bytes(ret) 来解决这个问题,但它还有另一个

python xml-rpc pickle

5
推荐指数
1
解决办法
4587
查看次数

使用 Zeep 的 Python SOAP 客户端 - 导入命名空间

一些背景信息:在解决身份验证问题后,我在这里提出了这个问题。我更喜欢打开一个新的问题,以避免与原始问题无关的评论污染前一个问题,并给予它适当的可见性。

我正在开发一个与服务器在同一 Intranet 中运行的 SOAP 客户端,无需访问 Internet。

from requests.auth import HTTPBasicAuth
from zeep import Client
from zeep.transports import Transport

wsdl = 'http://mysite.dom/services/MyWebServices?WSDL'
client = Client(wsdl, transport=HTTPBasicAuth('user','pass'), cache=None)
Run Code Online (Sandbox Code Playgroud)

问题:WSDL 包含对位于 Intranet 外部的外部资源的导入('import namespace="schemas.xmlsoap.org/soap/encoding/"'),因此 Zeep 客户端实例化失败并显示:

Exception: HTTPConnectionPool(host='schemas.xmlsoap.org', port=80): Max retries exceeded with url: /soap/encoding/ (Caused by NewConnectionError('<requests.packages.urllib3.connection.HTTPConnection object at 0x7f3dab9d30b8>: Failed to establish a new connection: [Errno 110] Connection timed out',))
Run Code Online (Sandbox Code Playgroud)

问题:是否可以(并且有意义)在不访问外部资源的情况下创建 Zeep 客户端?

作为一个额外的细节,另一个用 Java 编写的基于 XML rpc ServiceFactory 的客户端似乎对此类问题更有弹性,即使没有可用的互联网连接,该服务也会创建(并工作)。真的需要从 xmlsoap.org 导入命名空间吗?

在 @mvt 回答后进行编辑:

因此,我选择了建议的解决方案,它允许我同时控制对外部资源的访问(阅读:禁止访问与托管端点的服务器不同的服务器)。

class MyTransport(zeep.Transport): …
Run Code Online (Sandbox Code Playgroud)

python soap wsdl xml-rpc zeep

5
推荐指数
2
解决办法
7650
查看次数

Odoo 9.0 使用 python xml-rpc 创建产品变体

我正在尝试使用 python 通过 Odoo 的 xml-rpc api 导入一些 Product.templates 和它们的 product.variants。

实际上我的代码正在创建 Product.templates 及其 attribute.line.ids 非常好,但不知何故 product.variants 没有创建,所以只有一个 product.variant 被创建而没有任何属性。我不知道如何正确地做到这一点。

所以首先我创建一个 product.template 如下(为了使它简短,只在此处插入名称):

id = models.execute_kw(db, uid, password, 'product.template', 'create', [{
'name': "New Partner", 
}])
Run Code Online (Sandbox Code Playgroud)

之后我像这样添加attribute.line.ids:

for key in attValIdList.keys():
attribute_line = models.execute_kw(db, uid, password, 'product.attribute.line', 'create', [{
    'product_tmpl_id': id,
    'attribute_id': key,
    'value_ids': [(6, 0, attValIdList[key])]
}])
Run Code Online (Sandbox Code Playgroud)

所以 attValidKeys 是一个包含字典的列表,我在其中存储了 attribute_id 和它们的 attribute_value_id。

所以这部分被正确填充。但是没有 product.variants 从 product.line.ids 中创建出来。

实际上添加具有属性的 product.product 也工作正常,但后来我遇到了问题,这个没有任何属性的随机 product.product 是自动创建的..

如果你们能帮我解决这个问题,那就太好了。

python xml-rpc openerp odoo-8 odoo-9

5
推荐指数
1
解决办法
1270
查看次数

如何使用 PHP7 Ripcord 库获取 Odoo 数据?

我正在尝试通过 XMLRPC 从 Odoo 获取一些数据,并且正在使用 PHP 及其 Ripcord 库(在https://www.odoo.com/documentation/8.0/api_integration.html上推荐)。

所以我按照该页面上写的步骤进行操作。

首先,我从https://github.com/poef/ripcord.git下载了 Ripcord 文件。我将它们保存在名为ripcord的文件夹中,该文件夹位于我的 PHP 页面的索引目录中。

其次,我启用了 PHP7 的 OpenSSL 和 XMLRPC 扩展。我认为我做得很好,因为如果我执行下一句话:

$modules = get_loaded_extensions();
foreach ($modules as $module) {
    echo $module.', ';
}
Run Code Online (Sandbox Code Playgroud)

我得到这个结果:

核心、日期、libxml、openssl、pcre、zlib、过滤器、哈希、反射、SPL、会话、标准、apache2handler、mysqlnd、PDO、xml、日历、ctype、curl、dom、mbstring、fileinfo、ftp、gd、gettext、 iconv、json、exif、mcrypt、mysqli、pdo_mysql、Phar、posix、readline、shmop、SimpleXML、套接字、sysvmsg、sysvsem、sysvshm、分词器、wddx、xmlreader、xmlrpc、xmlwriter、xsl、Zend OPcache、

现在,这是我的index.php 的代码:

$url = 'http://localhost:30080';
$db = 'db_v80_test_01';
$username = 'admin';
$password = 'adminpwd';

require_once('ripcord/ripcord.php');

// $info = ripcord::client($url)->start(); 
// list($url, $db, $username, $password) = array($info['host'], $info['database'], $info['user'], $info['password']);

$common = ripcord::client($url.'/xmlrpc/2/common');

$uid …
Run Code Online (Sandbox Code Playgroud)

php xml-rpc odoo odoo-8 ripcord

5
推荐指数
1
解决办法
8655
查看次数

拒绝 xmlrpc.php 文件但不记录失败的请求

我将此添加到.htaccessWordPress 网站:

<files xmlrpc.php>
order allow,deny
deny from all
</files>
Run Code Online (Sandbox Code Playgroud)

它有效,当有人尝试访问时http://example.com/xmlrpc.php,会显示此消息:

Forbidden
您无权访问此服务器上的 /xmlrpc.php。

但是,日志仍然显示 ( less /var/log/apache2/error.log):

[Thu May 02 10:02:03.316061 2019] [access_compat:error] [pid 19467] 
[client 1.2.3.4:49409] AH01797: client denied by server 
configuration: /path/to/xmlrpc.php
Run Code Online (Sandbox Code Playgroud)

如何拒绝访问 xmlrpc.php(可能来自 .htaccess)但防止它出现在 Apache 日志中?

php apache wordpress .htaccess xml-rpc

5
推荐指数
1
解决办法
1373
查看次数

使用 Wordpress API 和 Javascript 库添加带有媒体的帖子

我想使用 API 在我的 Wordpress 博客上发帖。因为我在一个 Javascript 应用程序中,所以我会使用这种语言来做到这一点。

我进行了一些搜索,发现使用 Wordpress XML-RPC 协议的node-wpapi包。一切正常,除了发布带有媒体或特色图片的文章。

const responseUploadImage = await wp.media()
    .file('./tempImage.jpg')
    .create({
        title: 'My awesome image',
        alt_text: 'an image of something awesome',
        caption: 'This is the caption text',
        description: 'More explanatory information'
    });

const responsePostCreation = await wp.posts().create({
    title: 'Your Post Title',
    content: 'Your post content',
    // status: 'publish'
});

const response = await wp.media().id(responseUploadImage.id).update({
    post: responsePostCreation.id
});
Run Code Online (Sandbox Code Playgroud)

它确实创建帖子和上传媒体,但它不会创建带有媒体的帖子。

您知道使用 JS 库创建带有媒体和特​​色图像的帖子的替代方法或更好的方法吗?

javascript wordpress xml-rpc posts

5
推荐指数
1
解决办法
290
查看次数