使用POST请求通过Curl发送SimpleXmlElement

时间:2011-08-20 15:25:53

标签: php post curl simplexml

如何使用SimpleXmlElement请求类型通过Curl发送POST个对象,并重新接收SimpleXmlElement个对象。

我在本地服务器上创建了两个文件并创建了对象。

网址:

  • http://someaddress/fileOne.php
  • http://someaddress/fileTwo.php

从第一个文件输入对象:

$Xml = new SimpleXMLElement( '<?xml version="1.0" encoding="UTF-8"?><SomeXml></SomeXml>' );
$Translation = $Xml->addChild( 'Translation' );
$Translation->addChild( 'Phrase', 'test' );

现在我想通过curl发送这个$Xml对象并将其解析到其他文件中并发送回来

$Xml = new SimpleXMLElement( '<?xml version="1.0" encoding="UTF-8"?><SomeXml></SomeXml>' );
$Translation = $Xml->addChild( 'Translation' );
$Translation->addChild( 'Phrase', "Got your phrase: $phrase" );

如果您能提供代码示例,我将非常感激。 谢谢大家的帮助。

2 个答案:

答案 0 :(得分:2)

您不会发送SimpleXMLElement对象,您将发送XML数据。

从你的发送方面,你会:

$xml = '<?xml version="1.0" encoding="UTF-8"?><SomeXml></SomeXml>';

// assuming you have a previously initialized $curl_handle
curl_setopt( $curl_handle, CURLOPT_POSTFIELDS, $xml);

然后,从您的接收方,您将获得请求并使用SimpleXml解析它。

答案 1 :(得分:1)

唯一可以通过cURL传递的数据类型是string。您可以使用类似下面的函数解析元素(参考:http://www.nicolaskuttler.com/post/php-innerhtml/

function innerHTML( $contentdiv ) {
            $r = '';
            $elements = $contentdiv->childNodes;
            foreach( $elements as $element ) { 
                    if ( $element->nodeType == XML_TEXT_NODE ) {
                            $text = $element->nodeValue;
                            // IIRC the next line was for working around a
                            // WordPress bug
                            //$text = str_replace( '<', '&lt;', $text );
                            $r .= $text;
                    }    
                    // FIXME we should return comments as well
                    elseif ( $element->nodeType == XML_COMMENT_NODE ) {
                            $r .= '';
                    }    
                    else {
                            $r .= '<';
                            $r .= $element->nodeName;
                            if ( $element->hasAttributes() ) { 
                                    $attributes = $element->attributes;
                                    foreach ( $attributes as $attribute )
                                            $r .= " {$attribute->nodeName}='{$attribute->nodeValue}'" ;
                            }    
                            $r .= '>';
                            $r .= $this->innerHTML( $element );
                            $r .= "</{$element->nodeName}>";
                    }    
            }    
            return $r;
    }

然后urlencode(innerHTML($ XML))并传递curl。

警告 - 如果您正在使用大型DOM元素,上述功能可能会导致服务器紧张。