Zend框架以松耦合组件而闻名.
我想使用zend框架中的XML-RPC,对XML-RPC有依赖吗?就像我从Zend Framework Library中取出XML-RPC文件夹并尝试实例化RPC对象一样,它会抛出错误吗?
我在哪里可以找到从框架中分离组件的正确方法?
谢谢
在 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 方法?
我有一个通过xml-rpc发送字典的简单示例:
class CTest(object):
def __init__(self):
self.node1 = {'data':'zek', 'parent':{}, 'children':[]}
self.node2 = {'data':'bill', 'parent':{}, 'children':[]}
self.node1['children'].append(self.node2)
self.node2['parent'] = self.node1
def getNode(self):
return self.node1
Run Code Online (Sandbox Code Playgroud)
我有两个字典:node2是node1的子节点,同时node2将node1的引用作为父变量.所以它是一个递归字典.当我尝试通过XML-RPC发送node1时,我得到了以下异常:
#Command to execute xml-rpc dump method for serialization
test = CTest()
xmlrpclib.dumps((test,), 'Node Object')
#Exception
raise TypeError, "cannot marshal recursive dictionaries"
Run Code Online (Sandbox Code Playgroud)
是否可以通过XML-RPC发送node1(不更改字典结构)?
谢谢.
我正在编写工作负载调度程序。我希望我的软件是一个点对点调度程序,即。一个节点只知道一些邻居(其他节点)并使用它们到达其他节点。
每个节点都有自己的加权路由表来向其他对等点发送消息(基本上基于跳数),即。“我希望主人给我我的时间表”或“节点 B 上的资源 A 是否可用?” :哪个邻居离我的目标最近?
例如,我使用XML-RPC( xmlrpc-c) 和std::multimaps/编写了自己的路由协议std::maps。
我正在考虑使用ZeroMQ来优化我的数据流:
作为结果 :
您认为这ZeroMQ是一个有用的概念吗?
我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) 来解决这个问题,但它还有另一个

一些背景信息:在解决身份验证问题后,我在这里提出了这个问题。我更喜欢打开一个新的问题,以避免与原始问题无关的评论污染前一个问题,并给予它适当的可见性。
我正在开发一个与服务器在同一 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) 我正在尝试通过 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) 所以,我正在使用CookComputings XMLRPC库来与之交谈InfusionSoft(这是一个非常受欢迎的在线CRM).主要方法是:
[XmlRpcMethod("DataService.query")]
IEnumerable<object> QuerySubscriptionStatus(string apiKey,
string table, int limit, int page,
IDictionary queryData, string[] selectedFields);
Run Code Online (Sandbox Code Playgroud)
我很IEnumerable<object>遗憾地使用,因为InfusionSoft XML/RPC API需要它.我希望情况不是这样,但可悲的是.
由于我使用.NET 4.5,我想我可以做一个动态演员:
var subStatus = proxy.QuerySubscriptionStatus(
_key, "RecurringOrder", 500, 0, dict, sarray);
var result = subStatus.Cast<SubscriptionStatus>();
Run Code Online (Sandbox Code Playgroud)
不幸的是,这不起作用,我从C#中得到了一个非常难过的错误:
无法将类型为"CookComputing.XmlRpc.XmlRpcStruct"的对象强制转换为"WBI.Model.SubscriptionStatus".
我已经尝试将我的班级指定为struct; 哎呀我甚至尝试用XMLRpcMember()标签来指定它,但不,它只是不会转换.
我如何与IEnumerable?中的数据进行交互?
我试过的类/结构类型
public struct SubStatus
{
public int AffiliateId;
public int AutoCharge;
public double BillingAmt;
public string BillingCycle;
public int CC1;
public int CC2;
public int ContactId;
public DateTime EndDate; …Run Code Online (Sandbox Code Playgroud) 我将此添加到.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 日志中?
我想使用 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 库创建带有媒体和特色图像的帖子的替代方法或更好的方法吗?
xml-rpc ×10
python ×4
php ×3
wordpress ×2
.htaccess ×1
.net ×1
.net-4.5 ×1
apache ×1
c# ×1
c++ ×1
call ×1
dictionary ×1
getattr ×1
javascript ×1
marshalling ×1
module ×1
odoo ×1
odoo-8 ×1
pickle ×1
posts ×1
recursion ×1
ripcord ×1
routing ×1
scheduling ×1
soap ×1
wsdl ×1
xmlrpclib ×1
zeep ×1
zeromq ×1