我试图使用FritzBox (无线局域网路由器)向C#发送SOAP请求。目前,我正在手工组装XML请求,因为服务器没有提供WSDL文件。
我是这样创建将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文档相当糟糕:-/
发布于 2016-08-16 18:59:01
尝试这个代码它的工作,以获得外部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;发布于 2018-11-18 21:31:12
这里是一个常见UseCase的另一个例子:获取新的IP地址
private string ReconnectFritzBox()
{
string xmldata = "<?xml version=\"1.0\" encoding=\"utf-8\"?>" +
"<s:Envelope s:encodingStyle=\"http://schemas.xmlsoap.org/soap/encoding/\" xmlns:s=\"http://schemas.xmlsoap.org/soap/envelope\">" +
"<s:Body>" +
"<u:ForceTermination xmlns:u=\"urn:schemas-upnp-org:service:WANIPConnection:1\" />" +
"</s:Body>" +
"</s:Envelope>";
string resulXmlFromWebService = null;
var webRequest = WebRequest.Create("http://fritz.box:49000/igdupnp/control/WANIPConn1");
var httpRequest = (HttpWebRequest)webRequest;
httpRequest.Method = "POST";
httpRequest.ContentType = "text/xml; charset=utf-8";
httpRequest.Headers.Add("SOAPACTION", "urn:schemas-upnp-org:service:WANIPConnection:1#ForceTermination");
httpRequest.ProtocolVersion = HttpVersion.Version11;
httpRequest.Credentials = CredentialCache.DefaultCredentials;
httpRequest.ContentLength = xmldata.Length;
using (var requestStream = httpRequest.GetRequestStream())
{
//Create Stream and Complete Request
using (var streamWriter = new StreamWriter(requestStream, Encoding.ASCII))
{
streamWriter.Write(xmldata);
streamWriter.Close();
//Get the Response
var wr = (HttpWebResponse)httpRequest.GetResponse();
using (var srd = new StreamReader(wr.GetResponseStream()))
{
resulXmlFromWebService = srd.ReadToEnd();
}
}
}
return resulXmlFromWebService;
}完整代码示例也在Github:链接上。
https://stackoverflow.com/questions/38926729
复制相似问题