Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 访问XML-RPC接口_C#_Xml_Rpc_Xml Rpc - Fatal编程技术网

C# 访问XML-RPC接口

C# 访问XML-RPC接口,c#,xml,rpc,xml-rpc,C#,Xml,Rpc,Xml Rpc,我有一些带有RTORENT的服务器。我想获取关于这些服务器的状态信息,并删除Torrent,因为我想使用rtorrent的XML rpc接口 scgi_端口=本地主机:5000 现在,我需要一些帮助,以获得从接口返回到我的程序的信息。 我已经有了一些代码,但在执行时总是会出错 其他信息:无法建立与远程服务器的连接 using System; using System.Text; using System.Net; using System.IO; namespace SimpleXmlRpc

我有一些带有RTORENT的服务器。我想获取关于这些服务器的状态信息,并删除Torrent,因为我想使用rtorrent的XML rpc接口

scgi_端口=本地主机:5000

现在,我需要一些帮助,以获得从接口返回到我的程序的信息。 我已经有了一些代码,但在执行时总是会出错

其他信息:无法建立与远程服务器的连接

using System;
using System.Text;
using System.Net;
using System.IO;

namespace SimpleXmlRpcClient
{
    class Program
    {
        static void Main(string[] args)
        {
            WebRequest request = WebRequest.Create("http://ip/RPC2");
            request.Method = "POST";
            string postData = @"<?xml version=""1.0""?>
            <methodCall>
              <methodName>system.listMethods
            </methodCall>";
            byte[] byteArray = Encoding.UTF8.GetBytes(postData);
            request.ContentType = "application/x-www-form-urlencoded";
            request.ContentLength = byteArray.Length;
            Stream dataStream = request.GetRequestStream();
            dataStream.Write(byteArray, 0, byteArray.Length);
            dataStream.Close();
            WebResponse response = request.GetResponse();
            Console.WriteLine(((HttpWebResponse)response).StatusDescription);
            dataStream = response.GetResponseStream();
            StreamReader reader = new StreamReader(dataStream);
            string responseFromServer = reader.ReadToEnd();
            Console.WriteLine(responseFromServer);
            reader.Close();
            dataStream.Close();
            response.Close();
            Console.WriteLine("Press any key to continue ...");
            Console.ReadKey();
        }
    }
}
使用系统;
使用系统文本;
Net系统;
使用System.IO;
命名空间SimpleXmlRpcClient
{
班级计划
{
静态void Main(字符串[]参数)
{
WebRequest=WebRequest.Create(“http://ip/RPC2");
request.Method=“POST”;
字符串postData=@”
system.listMethods
";
byte[]byteArray=Encoding.UTF8.GetBytes(postData);
request.ContentType=“application/x-www-form-urlencoded”;
request.ContentLength=byteArray.Length;
Stream dataStream=request.GetRequestStream();
写入(byteArray,0,byteArray.Length);
dataStream.Close();
WebResponse=request.GetResponse();
Console.WriteLine(((HttpWebResponse)response.StatusDescription);
dataStream=response.GetResponseStream();
StreamReader=新的StreamReader(数据流);
字符串responseFromServer=reader.ReadToEnd();
Console.WriteLine(responseFromServer);
reader.Close();
dataStream.Close();
response.Close();
Console.WriteLine(“按任意键继续…”);
Console.ReadKey();
}
}
}

我终于找到了解决办法

您仍然需要解析xml编码的响应,但现在我终于得到了一个响应

System.Net.ServicePointManager.Expect100Continue = false;
                byte[] requestData = Encoding.ASCII.GetBytes("<?xml version=\"1.0\"?><methodCall><methodName>system.listMethods</methodName></methodCall>");

                HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://ip/RPC2");
                request.Method = "POST";
                request.UserAgent = "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729;)";
                request.ContentType = "text/xml";
                request.ContentLength = requestData.Length;

                using (Stream requestStream = request.GetRequestStream())
                    requestStream.Write(requestData, 0, requestData.Length);

                string result = null;
                using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
                {
                    using (Stream stream = response.GetResponseStream())
                    {
                        using (StreamReader reader = new StreamReader(stream, Encoding.ASCII))
                            result = reader.ReadToEnd();
                    }
                }
System.Net.ServicePointManager.Expect100Continue=false;
byte[]requestData=Encoding.ASCII.GetBytes(“system.listMethods”);
HttpWebRequest请求=(HttpWebRequest)WebRequest.Create(“http://ip/RPC2");
request.Method=“POST”;
request.UserAgent=“Mozilla/4.0(兼容;MSIE 8.0;Windows NT 6.0;.NET CLR 1.1.4322;.NET CLR 2.0.50727;.NET CLR 3.0.4506.2152;.NET CLR 3.5.30729;)”;
request.ContentType=“text/xml”;
request.ContentLength=requestData.Length;
使用(Stream requestStream=request.GetRequestStream())
Write(requestData,0,requestData.Length);
字符串结果=null;
使用(HttpWebResponse=(HttpWebResponse)request.GetResponse())
{
使用(Stream=response.GetResponseStream())
{
使用(StreamReader=newstreamreader(stream,Encoding.ASCII))
结果=reader.ReadToEnd();
}
}

很好,Olias的解决方案是正确的