是否可以使用基本的HTTP请求来使用XMLRPC服务
本文关键字:XMLRPC 请求 服务 可以使 是否 HTTP | 更新日期: 2023-09-27 18:25:53
我的任务是使用XML RPC API,我对它很不熟悉。我浏览了一些描述它的页面,我也看到了一些库。
然而,这让我有一种感觉,它归根结底就是发布一个HTTP请求,类似于REST,只是在正文中使用XML而不是JSON。
我想象构建一个类似于下面的HTTP请求:
POST /path/service.cfm HTTP/1.0
From: example@example.com
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编写一个快速客户端。
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,并且你应该输入正确的内容类型。如果服务提供商有特定Header之类的要求,则应该添加它们。