2

C# を使用して FritzBox (WLAN ルーター) に SOAP 要求を送信しようとしています。サーバーが WSDL ファイルを提供していないため、現在、XML SOAP 要求を手動で組み立てています。

これは、XML を添付する Web 要求を作成する方法です。

HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create (@"http://fritz.box:49000/igdupnp/control/WANIPConn1");
webRequest.Headers.Add (@"SOAP:Action");
webRequest.ContentType = "text/xml;charset=\"utf-8\"";
webRequest.Accept = "text/xml";
webRequest.Method = "POST";

しかし、リクエストを送信すると、WebException が発生します。

リモート サーバーがエラーを返しました: (404) 見つかりません。

私のURLで何かをしなければならないと確信していますが、それを修正する方法がわかりません。FritzBoxのドキュメントはかなり悪いです:-/

4

2 に答える 2

0

このコードを試して、外部 IP を取得してください

WebRequest webRequest = WebRequest.Create("http://fritz.box:49000/igdupnp/control/WANIPConn1");
        HttpWebRequest httpRequest = (HttpWebRequest)webRequest;
        httpRequest.Method = "POST";
        httpRequest.ContentType = "text/xml; charset=utf-8";
        httpRequest.Headers.Add("SOAPACTION", "urn:schemas-upnp-org:service:WANIPConnection:1#GetExternalIPAddress");
        httpRequest.ProtocolVersion = HttpVersion.Version11;
        httpRequest.Credentials = CredentialCache.DefaultCredentials;
        Stream requestStream = httpRequest.GetRequestStream();
        //Create Stream and Complete Request             
        StreamWriter streamWriter = new StreamWriter(requestStream, Encoding.ASCII);

        StringBuilder soapRequest = new StringBuilder(@"<?xml version=""1.0"" encoding=""utf-8""?> <s:Envelope xmlns:s=""http://schemas.xmlsoap.org/soap/envelope/"" s:encodingStyle=""http://schemas.xmlsoap.org/soap/encoding/""> <s:Body><u:GetExternalIPAddress xmlns:u=""urn:schemas-upnp-org:service:WANIPConnection:1"" /></s:Body></s:Envelope>");

        streamWriter.Write(soapRequest.ToString());
        streamWriter.Close();
        //Get the Response    
        HttpWebResponse wr = (HttpWebResponse)httpRequest.GetResponse();
        StreamReader srd = new StreamReader(wr.GetResponseStream());
        string resulXmlFromWebService = srd.ReadToEnd();
        return resulXmlFromWebService;
于 2016-08-16T18:59:01.893 に答える