【问题标题】:problem with xml file saving using curl and php使用curl和php保存xml文件的问题
【发布时间】:2009-06-18 05:56:34
【问题描述】:

我正在使用 curl 和 xml 将我的 xml 发布到 URL。

我现在正在收到它的响应,但它没有显示在输出中。

当我通过右键单击 View Source 页面时,就像 XML 文件输出一样。

我需要将该 xml 文档存储到一个文件中。

我在下面使用了这段代码

<?
$path = "https://newport.ingrammicro.com/mustang"; //Relative path to the file with $_POST parsing
$ch = curl_init($path); //Initialise curl resource with above file
$data = "my xml document to post"; 
//Data to be sent to the file

curl_setopt($ch, CURLOPT_POSTFIELDS, $data); //Send the data to the file?
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 0); 
curl_setopt($ch, CURLOPT_HEADER, 0);
$val = curl_exec($ch);   
curl_close($ch); //Close curl session
$fp = fopen('data.xml', 'w');
fwrite($fp, $val);
fclose($fp);
?>

但是当我打开保存的文件时只有一个值"1" 这是我在文件中得到的值。

实际上它是 curl 语句的真实值($val = curl_exec($ch); ) 布尔(真) 我试图呼应 Sval 的值,它也是“1”

如何将我的 XML 输出文件完全保存为 XML 文件输出。当我查看页面源时

看起来像这样

<PNAResponse>
  <Version>2.0</Version>
  <TransactionHeader>
    <SenderID>14-018111</SenderID>
    <ReceiverID>14-018111</ReceiverID>
    <ErrorStatus ErrorNumber=""/>
    <DocumentID>{F1B17BBB-F848-4693-914A-B6943AA9009A}</DocumentID>
    <TransactionID/>
    <TimeStamp>2009-06-17T22:42:44</TimeStamp>
  </TransactionHeader>
  <PriceAndAvailability SKU="V06669" Quantity="5" GovtProgramType="PA" GovtEndUserType="F">
    <Price>1413.04</Price>
    <SpecialPriceFlag>Y</SpecialPriceFlag>
    <ManufacturerPartNumber>V11H270020</ManufacturerPartNumber>
    <ManufacturerPartNumberOccurs/>
    <VendorNumber>4913</VendorNumber>
    <Description>POWERLITE 1735W LCD PROJ</Description>
    <ReserveInventoryFlag>N</ReserveInventoryFlag>
    <AvailableRebQty>0</AvailableRebQty>
    <Branch ID="10" Name="Mira Loma, California">
      <Availability>7</Availability>
      <OnOrder>8</OnOrder>
      <ETADate>2009-06-19</ETADate>
    </Branch>
    <Branch ID="30" Name="Millington, Tennessee">
      <Availability>0</Availability>
      <OnOrder>4</OnOrder>
      <ETADate>2009-06-22</ETADate>
    </Branch>
    <Branch ID="40" Name="Carol Stream, Illinois">
      <Availability>0</Availability>
      <OnOrder>18</OnOrder>
      <ETADate>2009-06-18</ETADate>
    </Branch>
    <Branch ID="80" Name="Jonestown Pennsylvania">
      <Availability>0</Availability>
      <OnOrder>9</OnOrder>
      <ETADate>2009-06-23</ETADate>
    </Branch>
  </PriceAndAvailability>
</PNAResponse>

有人知道怎么做吗?

【问题讨论】:

  • 下次您在这里(或其他任何地方)提问时,请尽量删除不必要的填充物和您确定不需要的信息,例如此处的 XML 文档。另请记住,段落和换行符不应始终匹配。

标签: php xml curl


【解决方案1】:

CURLOPT_RETURNTRANSFER 设置为true

curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

你为什么一开始就把它设置为 0?

【讨论】:

    【解决方案2】:

    curl_exec() 函数在成功时返回 TRUE,在失败时返回 FALSE,除非您将 CURLOPT_RETURNTRASFER 设置设置为 true (1):

    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    

    这将导致 curl_exec() 函数返回请求的响应正文而不是真/假值。

    另请参阅PHP: curl_exec - Manual 的“返回值”部分

    【讨论】:

      【解决方案3】:

      如果您想尝试添加一些用户代理以确保您获得与真实浏览器相同的输出

                      @curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.1) Gecko/20061204 Firefox/2.0.0.1");
      

      【讨论】:

        【解决方案4】:

        就像 Grabiel Sosa 所说,“您可能想尝试添加一些用户代理,以确保获得与真实浏览器相同的输出”。

        网站http://www.user-agents.org/index.shtml?moz 包含大量用户代理(Mozilla 和其他)

        【讨论】:

          猜你喜欢
          • 2010-11-03
          • 2013-07-04
          • 2020-07-27
          • 1970-01-01
          • 2011-11-07
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多