首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >向AVM FritzBox 7270发送Tr064请求

向AVM FritzBox 7270发送Tr064请求
EN

Stack Overflow用户
提问于 2017-01-17 19:20:54
回答 1查看 1.5K关注 0票数 0

我正在学习如何使用C#向我的AVM FritzBox 7270路由器发送SOAP请求。

下面是我向路由器发送SOAP请求的方法:

代码语言:javascript
运行
复制
    private string Execute(string controlUrl, string serviceType, string action)
    {
        WebRequest webRequest = WebRequest.Create("http://fritz.box:49000" + controlUrl);
        HttpWebRequest httpRequest = (HttpWebRequest)webRequest;
        httpRequest.Method = "POST";
        httpRequest.ContentType = "text/xml; charset=utf-8";
        httpRequest.Headers.Add("SOAPACTION", string.Format("{0}#{1}", serviceType, action));
        httpRequest.ProtocolVersion = HttpVersion.Version11;
        httpRequest.Credentials = new NetworkCredential("username", "password"); 
        Stream requestStream = httpRequest.GetRequestStream();

        StreamWriter streamWriter = new StreamWriter(requestStream, Encoding.ASCII);

        streamWriter.Write(GetBody(serviceType, action));
        streamWriter.Close();
        //Get the Response    
        try
        {
            HttpWebResponse wr = (HttpWebResponse)httpRequest.GetResponse();
            StreamReader srd = new StreamReader(wr.GetResponseStream());
            return srd.ReadToEnd();
        }
        catch (WebException)
        {
            return null;
        }
    }

函数GetBody:

代码语言:javascript
运行
复制
    private string GetBody(string serviceType, string action)
    {
        const string fmt = @"<?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:{0} xmlns:u=""{1}"" />
  </s:Body>
</s:Envelope>
";        
            return string.Format(fmt, action, serviceType);
        }
    }

我用我在互联网上任何地方找到的参数测试了这个方法:

代码语言:javascript
运行
复制
controlUrl = "/upnp/control/WANIPConn1"
serviceType = "urn:schemas-upnp-org:service:WANIPConnection:1"
action = "GetExternalIPAddress"

这样做效果很好。

然而,我认为我应该走官方的方式,首先发送一个请求。

代码语言:javascript
运行
复制
http://fritz.box:49000/tr64desc.xml

来接收对我的实际路由器有效的参数。在对此请求的响应中,我找到了以下节点:

代码语言:javascript
运行
复制
<service>
  <serviceType>urn:dslforum-org:service:WANIPConnection:1</serviceType>
  <serviceId>urn:WANIPConnection-com:serviceId:WANIPConnection1</serviceId>
  <controlURL>/upnp/control/wanipconnection1</controlURL>
  <eventSubURL>/upnp/control/wanipconnection1</eventSubURL>
  <SCPDURL>/wanipconnSCPD.xml</SCPDURL>
</service>

使用serviceId和controlUrl的这些值,我得到了错误500 (内部服务器错误)。

有谁能帮帮我呢?我的代码出了什么问题?

EN

回答 1

Stack Overflow用户

发布于 2017-01-19 00:22:12

我想问题已经解决了:

Fritz.Box似乎有很多未记录在案的功能,而我在互联网上找到的参数显然是are功能的一部分。

使用

代码语言:javascript
运行
复制
<service>
  <serviceType>urn:dslforum-org:service:WANPPPConnection:1</serviceType>
  <serviceId>urn:WANPPPConnection-com:serviceId:WANPPPConnection1</serviceId>
  <controlURL>/upnp/control/wanpppconn1</controlURL>
  <eventSubURL>/upnp/control/wanpppconn1</eventSubURL>
  <SCPDURL>/wanpppconnSCPD.xml</SCPDURL>
</service>

我可以打电话给你

代码语言:javascript
运行
复制
GetExternalIPAddress

没有问题。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41695810

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档