2015-12-07 24 views
1

我的任务是使用XML RPC API,而且我对它很陌生。我浏览了几页描述它的内容,我也看到了那里有几个库。是否可以使用基本的HTTP请求来使用XML RPC服务?

但是,它给我留下了一个感觉,就是发布HTTP请求,类似于REST,除了在主体中使用XML而不是JSON。

我想构建类似于下面的HTTP请求:

POST /path/service.cfm HTTP/1.0 
From: [email protected] 
User-Agent: whatever/1.0 
Content-Type: application/xml 
Content-Length: 155 

<?xml version="1.0"?> 
<methodCall> 
    <methodName>examples.getStateName</methodName> 
    <params> 
    <param> 
     <value><i4>40</i4></value> 
    </param> 
    </params> 
</methodCall> 

我在正确的轨道上?周围的大量图书馆让我觉得它可能比我想象的要复杂。理想情况下,我想用.NET自己编写一个快速客户端。

回答

1
static void Main(string[] args) 
    { 
      HttpWebRequest request = BuildWebRequest(); 

      var response = request.GetResponse() as HttpWebResponse; 
      var responseContent = new StreamReader(response.GetResponseStream()).ReadToEnd(); 

    } 

    private static HttpWebRequest BuildWebRequest() 
    { 
     var request = WebRequest.Create(Url) as HttpWebRequest; 

     request.Method = "POST"; 
     request.ContentType = "application/xml"; 
     request.Timeout = 40000; 
     request.ServicePoint.Expect100Continue = true; 

     string body = @"<?xml version="1.0"?> 
<methodCall> 
    <methodName>examples.getStateName</methodName> 
    <params> 
    <param> 
     <value><i4>40</i4></value> 
    </param> 
    </params> 
</methodCall>"; 

     byte[] bytes = Encoding.Default.GetBytes(body); 

     using (var requestStream = request.GetRequestStream()) 
     { 
      requestStream.Write(bytes, 0, bytes.Length); 
     } 

     return request; 
    } 

是的,这不是一个问题,这里是一个例子如何做到这一点。在字符串正文中,您必须只写入您的xml,并且您应该输入正确的内容类型。如果服务提供商具有特定标题的要求,则应添加它们。

+0

啊,是的,这正是我所要做的。那么你之前在XML RPC服务上使用过这个吗? –

+0

@drminnaar是的,我愿意。 – mybirthname

+0

@drminnaar你可以接受我的答案,如果你帮助你。 – mybirthname

相关问题