проблема с сохранением XML-файла с использованием curl и php - PullRequest
0 голосов
/ 18 июня 2009

Я использую 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);) BOOL (истина) я попытался повторить значение 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 ]

1 голос
/ 18 июня 2009

Функция curl_exec () возвращает TRUE в случае успеха и FALSE в случае неудачи, , если для параметра CURLOPT_RETURNTRASFER не установлено значение true (1):

curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

Это приведет к тому, что функция curl_exec () будет возвращать тело ответа на запрос, а не значение true / false.

См. Также раздел «Возвращаемые значения» в PHP: curl_exec - Руководство

1 голос
/ 18 июня 2009

также, если вы хотите попробовать добавить некоторый пользовательский агент, чтобы убедиться, что вы получаете тот же вывод, что и в реальном браузере

                @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");
1 голос
/ 18 июня 2009

Установите CURLOPT_RETURNTRANSFER в true:

curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

Почему вы сначала установили его на 0?

0 голосов
/ 09 июля 2009

Как сказал Грабил Соса, «вы можете попробовать добавить некоторый пользовательский агент, чтобы убедиться, что вы получаете тот же вывод, что и в реальном браузере».

Сайт http://www.user -agents.org / index.shtml? Moz содержит тонны User-Agent (Mozilla и др.)

...