【问题标题】:Trouble parsing XML response from curl_exec无法解析来自 curl_exec 的 XML 响应
【发布时间】:2013-09-27 21:27:48
【问题描述】:

我正在使用 cURL 将 HTML 表单的内容提交给第 3 方服务,它向我返回一个 XML 响应。但无论我在做什么,我似乎都无法解析那个 XML 响应来自定义结果的显示。

这是处理表格的代码(注意一些身份证号码已被删减):

<?php
 $FirstName = $_POST['FirstName'] ;
 $LastName = $_POST['LastName'] ;
 $Zip = $_POST['Zip'] ;
 $EmailAddress = $_POST['EmailAddress'] ;
 $PrimaryPhoneNumber = $_POST['PrimaryPhoneNumber'] ;
 $DateofBirth = $_POST['DateofBirth'] ;



$myvars = '&VID=' . '****' . '&LID=' . '****' . '&AID=' . '****' . '&FirstName=' . $FirstName . '&LastName=' . $LastName .
       '&EmailAddress=' . $EmailAddress . '&PrimaryPhoneNumber=' . $PrimaryPhoneNumber . '&Zip=' . $Zip . '&DateofBirth=' . $DateofBirth;


if ($FirstName!='' && $LastName!='' && $Zip!='' && $EmailAddress!='' && $PrimaryPhoneNumber!='' && $DateofBirth!='') {
    $c = curl_init();
    curl_setopt($c, CURLOPT_URL, 'http://secure.leadexec.net/leadimport.asmx/LeadReceiver');
    curl_setopt($c, CURLOPT_POST, true);
    curl_setopt($c, CURLOPT_POSTFIELDS, $myvars);
    curl_exec ($c);
    curl_close ($c);

} else {
    echo '<p>Please make sure you have filled out the form completely</p>';
}
?>

这是我返回的响应的原始输出:

<?xml version="1.0" encoding="utf-8"?>
<PostResponse xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.leadproweb.com/">
  <isValidPost>false</isValidPost>
  <ResponseType>Duplicate_Lead</ResponseType>
  <ResponseDetails>Duplicate Lead, Last Received On: 9/27/2013 2:17:26 PM</ResponseDetails>
  <LeadIdentifier>20889333</LeadIdentifier>
  <VendorAccountAssigned>0</VendorAccountAssigned>
  <PendingQCReview>false</PendingQCReview>
  <Price>0</Price>
  <RedirectURL />
</PostResponse>

当我尝试使用 SimpleXmlElementsimplexml_load_string() 之类的方法来解析 XML 时,它们似乎被忽略了,我无法摆脱原始 XML 输出除非我删除 curl_exec($c) 行。

是不是我做错了什么?

【问题讨论】:

  • 您是否尝试过分配输出:$response = curl_exec( $c );?你打算如何解析它?
  • 是的,我已经尝试过这样做,然后执行print_r ($response);,但它没有给我任何结果。
  • @Evster var_dump($response); 的结果是什么?
  • @Evster 查看页面的源代码(在浏览器中右键单击,选择“查看源代码”)!
  • OK 所以print_r ($response); 在我查看源代码时实际上给了我1 的值。在源代码中调用var_dump($response); 会得到bool(true)。但我应该注意到,在显示这些数据之前,源代码仍然会吐出所有不需要的 XML,如我原来的帖子中所述。

标签: php xml curl


【解决方案1】:

你需要添加

curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);

获取响应的值(字符串);否则,curl_exec 只返回一个布尔值(成功/失败)。见http://php.net/manual/en/function.curl-exec.php

然后你换行

curl_exec( $c );

$response = curl_exec( $c );

最后,您使用您选择的解析器解析响应字符串。

【讨论】:

  • 谢谢,这似乎是我正在寻找的解决方案!
  • 我还应该注意,我需要消除对curl_exec( $c ); 的直接调用,而是将其分配给一个变量,否则我会出现重复结果的问题。
  • 对弗洛里斯的任何困惑感到抱歉。你是对的。我的意思是我需要用$response = curl_exec($c);替换curl_exec($c); 的调用。如果我将这两个调用都留在我的代码中,它将无法正常工作。
  • 我已经编辑了我的答案以明确这一点。我们现在可以删除这些 cmets...
猜你喜欢
  • 2011-10-23
  • 1970-01-01
  • 1970-01-01
  • 2012-10-26
  • 2012-02-05
  • 1970-01-01
  • 1970-01-01
  • 2019-10-17
  • 2011-04-30
相关资源
最近更新 更多