对RTorrent服务器进行XML-RPC调用返回401

时间:2020-04-12 12:08:16

标签: c# xml-rpc

我正在尝试使用控制台应用程序连接到rTorrent服务器(我只是试图使某些操作自动化)。我对此很陌生,因此可能证明这是一个配置设置,但我认为我首先会对代码产生第二意见。我可以进行webrequest,但此时返回的响应(通过端口443使用http或https)是

使用(HttpWebResponse响应=(HttpWebResponse)myHttpWebRequest.GetResponse())

我使用了与ftp进入服务器相同的凭据,但是我对rTorrent的配置了解不足,无法确定这是否可以保证从Webrequest进行访问。我没有运行服务器,所以我无权访问日志文件。基本上,我只是想确认以下代码是否应该工作。这是我用来尝试列出其他可用方法的方法(我暂时忽略该证书,直到我可以运行它为止)

 private static void ListMethods()
    {
        ServicePointManager.ServerCertificateValidationCallback += (sender, cert, chain, sslPolicyErrors) => true;
        System.Net.ServicePointManager.Expect100Continue = false;
        byte[] requestData = Encoding.ASCII.GetBytes("<?xml version=\"1.0\"?><methodCall><methodName>system.listMethods</methodName></methodCall>");

        Uri myUri = new Uri("http://MyIP/RPC2");
        WebRequest request = WebRequest.Create(myUri);
        HttpWebRequest myHttpWebRequest = (HttpWebRequest)request;
        NetworkCredential myNetworkCredential = new NetworkCredential("username", "password");

        CredentialCache myCredentialCache = new CredentialCache();
        myCredentialCache.Add(myUri, "Basic", myNetworkCredential);

        myHttpWebRequest.PreAuthenticate = true;
        myHttpWebRequest.Credentials = myCredentialCache;

        myHttpWebRequest.Method = "POST";
        myHttpWebRequest.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;)";
        myHttpWebRequest.ContentType = "text/xml";
        myHttpWebRequest.ContentLength = requestData.Length;

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

        string result = null;
        using (HttpWebResponse response = (HttpWebResponse)myHttpWebRequest.GetResponse())
        {
            using (Stream stream = response.GetResponseStream())
            {
                using (StreamReader reader = new StreamReader(stream, Encoding.ASCII))
                    result = reader.ReadToEnd();
            }
        }
        Console.WriteLine("Press any key to continue ...");
        Console.ReadKey();


    }

0 个答案:

没有答案