使用curl和php保存xml文件的问题

时间:2009-06-18 05:56:34

标签: php xml curl

我使用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>

有没有人知道如何做到这一点?

4 个答案:

答案 0 :(得分:1)

CURLOPT_RETURNTRANSFER设为true

curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

为什么你首先将它设置为0?

答案 1 :(得分:1)

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

curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

这将导致curl_exec()函数返回请求的响应主体而不是true / false值。

另请参阅PHP: curl_exec - Manual

上的“返回值”部分

答案 2 :(得分:1)

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

                @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");

答案 3 :(得分:0)

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

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