2009-06-18 6 views
0

J'utilise curl et xml pour poster mon xml à une URL.problème avec l'enregistrement de fichier xml en utilisant curl et php

Je reçois une réponse à partir de maintenant, mais il ne s'affiche pas en sortie.

lorsque je prends la page View Source par un clic droit dessus comme la sortie du fichier XML.

J'ai besoin de stocker ce document XML dans un fichier.

J'ai utilisé ce code ci-dessous

<? 
$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); 
?> 

mais quand j'ai ouvert le fichier enregistré qu'une seule valeur "1" c'est la valeur que je reçois dans le fichier.

fait sa la valeur réelle de la déclaration boucle ($ val = curl_exec ($ ch);) bool (true) i essayé de faire écho à la valeur de Sval, il a également "1"

Comment i enregistrer mon fichier de sortie XML exactement comme le fichier XML output.when je prends source de la page

il ressemblera à ceci

<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> 

Est-ce que quelqu'un a une idée comment faire cela?

+1

La prochaine fois que vous posez une question ici (ou ailleurs), s'il vous plaît essayer de supprimer remplissage inutile et informations que vous êtes absolument sûr n'est pas nécessaire, par exemple le document XML ici. Gardez également à l'esprit que les paragraphes et les sauts de ligne ne doivent pas toujours correspondre. – phihag

Répondre

1

Set CURLOPT_RETURNTRANSFER à true:

curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 

Pourquoi avez-vous mis à 0 en premier lieu?

1

La fonction retourne TRUE en cas de succès et FALSE en cas d'échec curl_exec(), à moins que vous définissez le paramètre CURLOPT_RETURNTRASFER true (1):

curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 

Cela entraînera la fonction curl_exec() pour renvoyer le corps de réponse de la requête plutôt qu'une valeur true/false.

Voir aussi la section «Valeurs de retour d'au PHP: curl_exec - Manual

1

aussi si vous voulez essayer d'ajouter un agent utilisateur pour être sûr que vous obtenez la même sortie comme un vrai navigateur

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

Comme Grabiel Sosa dit, "vous voudrez peut-être essayer d'ajouter un agent utilisateur pour être sûr que vous obtenez la même sortie qu'un vrai navigateur".

Le site http://www.user-agents.org/index.shtml?moz contient des tonnes de User-Agent (Mozilla et autres)