php使用cURL读取XML字节

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了php使用cURL读取XML字节相关的知识,希望对你有一定的参考价值。

部署在A服务器的php页面使用curl post一个array(来自A服务器的form)到B服务器的处理页面。B服务器只会根据post过来的数据作出处理并在B服务器上页面显示。而我用cURL在A服务器抓起到的信息是<result><code>0</code><msg>OK</msg>,同时把这些string信息赋予到A服务器页面上的一个变量$Res 根据这个我无法用 $doc=simplexml_load_string($Res)来解析出 code和msg的节点值。

根据测试,如果
$Res="<?xml version='1.0' standalone='yes'?>
<Messages>
<result><code>-3</code><msg>reqire params</msg></result>
</Messages>");
这样才能用simplexml_load_string解析出节点值。

B服务器我是不能控制和修改的,请问怎样才能根据B返回的
”<result><code>0</code><msg>OK</msg>“ 在A服务器上解析出code和msg的节点值呢?

参考技术A 不用那么麻烦,字符串截取即可。或者你把返回结果前自己拼接一个
<?xml version="1.0" encoding="UTF-8"?>
参考技术B 你debug一下 看具体返回什么, 如果是<result><code>0</code><msg>OK</msg> 可能需要用正则了追问

是这结果,怎么用正则?谢谢

PHP PHP - cURL收到xml

&lt;?php

/******************************************
 * POST TO REMOTE SCRIPT
 ******************************************/

//fake data to send via cURL
$post = 'var1=hello&amp;var2=world';
//replace with your post destination url
$url = &quot;http://example.com/script.php&quot;;
//start cURL
$ch = curl_init();
//define curl: set where the post is going
curl_setopt($ch, CURLOPT_URL, $url);
//define curl: set that you want the response
//to be store in a variable and not display on screen
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
//define curl: set what you are sending
curl_setopt($ch, CURLOPT_POSTFIELDS, $post);

//If the post was not successful curl_exec will return false.
//If successful store response in variable 
if ($xmlResponse = curl_exec($ch)) {
  //close the connection  
  curl_close($ch);
  
  //Trim the response from excess white space
  //NOTE:It may be necessary to do further sanitizing of the string
  $xmlResponse = trim($xmlResponse);
  //enable error reporting
  libxml_use_internal_errors(true);
  //parse the xml response string
  $xmldata = simplexml_load_string($xmlResponse);
  //store the original xml in an array
  $xml = explode(&quot;\n&quot;, $xmlResponse);
  //if simplexml_load_string() fails, it returns false.
  //if it returns false, collect the errors and print them to the screen
  if (!$doc) {
    $errors = libxml_get_errors();
    foreach ($errors as $error) {
      echo display_xml_error($error, $xml);
    }
    libxml_clear_errors();
  }else{
    //Successfull parsed the xml string
    print_r($doc);
  }
}else{
  //There was a problem with cURL executing. Do you have cURL on this server?
  echo &quot;cURL was not able to execute&quot;;
  //close connection
  curl_close($ch);
}

//Helper Function For Displaying the Errors
function display_xml_error($error, $xml){
  $return  = $xml[$error-&gt;line - 1] . &quot;\n&quot;;
  $return .= str_repeat('-', $error-&gt;column) . &quot;^\n&quot;;
  switch ($error-&gt;level) {
    case LIBXML_ERR_WARNING:
    $return .= &quot;Warning $error-&gt;code: &quot;;
    break;
    
    case LIBXML_ERR_ERROR:
    $return .= &quot;Error $error-&gt;code: &quot;;
    break;
    
    case LIBXML_ERR_FATAL:
    $return .= &quot;Fatal Error $error-&gt;code: &quot;;
    break;
  }
  $return .= trim($error-&gt;message) .
  &quot;\n  Line: $error-&gt;line&quot; .
  &quot;\n  Column: $error-&gt;column&quot;;
  if ($error-&gt;file) {
    $return .= &quot;\n  File: $error-&gt;file&quot;;
  }
  return &quot;$return\n\n--------------------------------------------\n\n&quot;;
}
?&gt;

以上是关于php使用cURL读取XML字节的主要内容,如果未能解决你的问题,请参考以下文章

j2me:如何将字节数组解析为 xml,然后从该 XML 读取和显示特定数据

如何使用php从url读取xml文件

无法使用 XML 文件的 PHP 读取子节点

PHP读取XML并写入数据库

PHP读取及生成xml文件实测

使用 StAX / Kettle (Pentaho) 读取 XML 文件