首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Powershell和XMLRPC

Powershell和XMLRPC
EN

Stack Overflow用户
提问于 2013-12-06 18:07:08
回答 2查看 2.8K关注 0票数 2

我们是一个使用Powershell extensively.We的Windows,它也有一个空间行走,作为现有Powershell脚本的一部分,我想从中轮询一些数据。空间行走API是通过XMLRPC公开的。

我花了一些时间寻找如何做到这一点的例子,但信息确实很缺乏。我能得到的最接近的链接是这个链接(不再可用) https://web.archive.org/web/20080202045713/http://thepowershellguy.com/blogs/posh/archive/2008/01/31/powershell-and-xmlrpc-posh-challenge-part-12.aspx

缺乏例子使我认为我看错了方向。我知道新的webserviceproxy,我用它来查询Sharepoint,但我没有看到任何人使用它进行XMLRPC调用。

用Perl或Python编写调用非常简单,但这不是我在这个特定情况下所需要的.

我走错路了吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-12-09 05:15:54

你看过XML-RPC.NET吗?您必须在XmlRpcProxyGen中创建一个实现IXmlRpcProxy的IXmlRpcProxy类,但是一旦这样做了,您应该能够加载该.NET程序集并使用PowerShell中的代理类。

票数 1
EN

Stack Overflow用户

发布于 2014-12-08 17:43:57

我只是亲自实现了这一点,所以我想我应该把它传下去。

实际上,您可以下载DLL,而不是自己编译源代码--我通过使用NuGet找到了DLL,但是有人说您可以从zip中获得它。

我决定在powershell中实现C#代码中的接口,以最大限度地提高可移植性/开发的易用性。如果需要,可以将C#代码编译为DLL并使用powershell加载该代码,但每次更改C#代码时都必须返回并重新编译。在这里,powershell动态地为您重新编译。(唯一的缺点是,如果使用本机windows powershell IDE,每次更改C#代码时,都必须关闭并重新打开会话以清除会话。)

下面是使用XML-RPC.NET和powershell的OpenSubtitles API示例(不是最干净的代码,但希望说明XML-RPC.net的使用情况):

代码语言:javascript
复制
$source = @'
namespace OpenSubtitlesAPI
{
    using CookComputing.XmlRpc;

    [XmlRpcUrl("http://api.opensubtitles.org/xml-rpc")]
    public interface IOpenSubtitles : IXmlRpcProxy
    {
        [XmlRpcMethod("LogIn")]
        XmlRpcStruct LogIn(string username, string password, string language, string useragent);

        [XmlRpcMethod("LogOut")]
        XmlRpcStruct LogOut(string token);

        [XmlRpcMethod("SearchSubtitles")]
        XmlRpcStruct SearchSubtitles(string token, XmlRpcStruct[] queries);

        [XmlRpcMethod("SearchSubtitles")]
        XmlRpcStruct SearchSubtitles(string token, XmlRpcStruct[] queries, int limit);
    }

    public class ProxyFactory
    {
        public static IOpenSubtitles CreateProxy()
        {
            return XmlRpcProxyGen.Create<IOpenSubtitles>();
        }
    }
}
'@

# Load XML-RPC.NET and custom interfaces
if ([Type]::GetType("OpenSubtitlesAPI.ProxyFactory") -eq $null)
{
    [Reflection.Assembly]::LoadFile("C:\path\to\CookComputing.XmlRpcV2.dll") | Out-Null
    $dynamicAssembly = Add-Type -TypeDefinition $source -ReferencedAssemblies ("C:\path\to\CookComputing.XmlRpcV2.dll")
}

# Set up proxy
$proxy = [OpenSubtitlesAPI.ProxyFactory]::CreateProxy()
$proxy.UserAgent = "user agent"
$proxy.EnableCompression = $true

# Log in
$LogInResponse = $proxy.LogIn("user name", "password", "language", "user agent")

# Build query
$query = New-Object CookComputing.XmlRpc.XmlRpcStruct
$query.Add("moviehash", "movie hash")
$query.Add("moviebytesize", "movie size")
$query.Add("sublanguageid", "language")
$queries = @($query)

# Search
$SearchResponse = $proxy.SearchSubtitles($LogInResponse.token, $queries)

# Log out
$LogOutResponse = $proxy.LogOut($LogInResponse.token)

我的回答对最初的问题有点延迟,但希望这能帮助到外面的人。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20430668

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档