我正在使用网站提供的私人项目服务。
我有一个像这样的xml文件:
<Request Originator="xxxxx" Company="xxx">
<Range Code="xx">
<Item Id="xxxxxx-xxxxx-xxxxxx-xxx-7E8B94462F2C" />
</Range>
<KeyValues>
<Translations>
<Language Value="de" />
<Language Value="en" />
</Translations>
<Regions Show="true" />
<Towns Show="true" />
</KeyValues>
</Request>
的修改 所以我知道直到今天:我是否向此网址发送请求:http://interface.deskline.net/DSI/KeyValue.asmx?WSDL 使用该服务器进行通信但总是收到此错误消息:
soap:ReceiverSystem.Web.Services.Protocols.SoapException: Server was unable to process request. ---> System.Xml.XmlException: Data at the root level is invalid. Line 1, position 1. at System.Xml.XmlTextReaderImpl.Throw(Exception e) at System.Xml.XmlTextReaderImpl.ParseRootLevelWhitespace() at System.Xml.XmlTextReaderImpl.ParseDocumentContent() at System.Web.Services.Protocols.SoapServerProtocol.SoapEnvelopeReader.Read() at System.Xml.XmlReader.MoveToContent() at System.Web.Services.Protocols.SoapServerProtocolHelper.GetRequestElement() at System.Web.Services.Protocols.Soap12ServerProtocolHelper.RouteRequest() at System.Web.Services.Protocols.SoapServerProtocol.Initialize() at System.Web.Services.Protocols.ServerProtocolFactory.Create(Type type, HttpContext context, HttpRequest request, HttpResponse response, Boolean& abortProcessing) --- End of inner exception stack trace ---1
我没有得到它的沟通。这里是我写的一些PHP代码:
$url = 'http://interfacetest.deskline.net/DSI/KeyValue.asmx';
$content = 0;
if (file_exists('/mm/request.xml')) {
$xml = fopen('/mm/request.xml', "r");
$content = fread($xml,filesize("/mm/request.xml"));
fclose($xml);
} else {
echo 'No file, no request';
}
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
// Following line is compulsary to add as it is:
curl_setopt($ch, CURLOPT_POSTFIELDS,
"xmlRequest=" . $content);
$response = curl_exec($ch);
echo $response;
答案 0 :(得分:1)
DOMDocument非常适合处理XML文档,例如:
$domd=new DOMDocument();
$domd->formatOutput=true;
$domd->loadXML($str,LIBXML_NOBLANKS);
$rangeele=$domd->getElementsByTagName("Range")->item(0);
for($i=0;$i<5;++$i){
$tmp=$domd->createElement("Item");
$tmp->setAttribute("Id",$i);
$rangeele->appendChild($tmp);
}
var_dump($domd->saveXML());
输出
...
<Range Code="xx">
<Item Id="xxxxxx-xxxxx-xxxxxx-xxx-7E8B94462F2C"/>
<Item Id="0"/>
<Item Id="1"/>
<Item Id="2"/>
<Item Id="3"/>
<Item Id="4"/>
</Range>
...
引用how can I set up the communication between my server and theirs with php
- 可能有多种方式,具体取决于服务器支持的内容。最常见的方法是通过HTTP协议进行通信(顺便提一下,这是与Web浏览器主要用于与stackoverflow.com网站通信的协议),这可以像
$ch=curl_init('http://example.org/api');
curl_setopt_array($ch,array(CURLOPT_POST=>1,CURLOPT_HTTPHEADER=>array('Content-Type: application/xml'),CURLOPT_POSTFIELDS=>$xml));
curl_exec($ch);
curl_close($ch);
另一种流行的方法是使用TCP协议(其中http协议建立在其上),可以像
那样完成$sock=socket_create(AF_INET,SOCK_STREAM,SOL_TCP);
socket_connect($sock,"example.org",1337);
socket_write($socket,$xml);
socket_close($sock);
还有很多其他协议,ofc(and curl supports a great deal of them),但这些是最常见的协议。再次,它真的取决于目标服务器支持什么,我们在SO不知道,问你想要与之沟通的人。
(ps,在上面的例子中,我省略了错误检查。同样,我投票并投票结束,因为你的问题太宽泛,缺乏细节。你甚至没有解释你期望使用什么协议。引用{ {1}}嗯,你有什么尝试?它是如何失败的?)