2011-10-15 3 views
3

J'envoie des données XML comme une requête POST avec boucle au serveur comme suit:données Curl Demande dommages XML post

// $params contains xslt="<xml version ...." 
    $url = get_cfg_var('Http_Host') . "/webservice/update.php?"; 
    $strParameters = http_build_query($params); 

    $ch = curl_init($url); 
    // Set options 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
    curl_setopt($ch, CURLOPT_POST, 1); 
    curl_setopt($ch, CURLOPT_POSTFIELDS, $strParameters); 
    $data = curl_exec($ch); 

Maintenant, quand je reçois les données webserive/update.php

$_REQUEST['xslt'] contient seulement quelques données de feuilles de xml avec la plupart des balises dépouillées comme de si [mais avec beaucoup de nouvelles lignes]

USD 

    , 
    . 


    0 
    5 

Je suis à une perte de comprendre ce qui se passe. Est-ce un problème de double encodage?

strParameters ne contiennent des données appropriées au format form-urlencoded [+ pour l'espace, etc.]

J'ai essayé urldecode avant de l'envoyer à gondoler. mais cela ne résout toujours pas le problème.

+0

Si vous regardez dans ces données dans un navigateur, je dirais: pas étonnant. C'est XML et le navigateur va cacher tous les tags qu'il ne connaît pas. Vous cherchez peut-être 'htmlspecialchars' dans ce cas. – hakre

+0

Non - Je ne regarde pas ces données dans le navigateur. J'ai simplement jeté le _REQUEST ['xslt'] dans un fichier du côté serveur. – Fakrudeen

+0

Je ne vois pas d'erreur dans votre code. La méthode semble bonne. Votre serveur * pourrait * modifier les données. Vous pouvez essayer de coder en base64 les données et les décoder à nouveau dans le script et vérifier si elles le sont ensuite. – hakre

Répondre

0

Ceci est plus un commentaire qu'une solution concrète, mais je considère d'utiliser la méthode de tableau au lieu de coder votre propre:

Vous ne avez pas besoin de coder les données post-vous. Vous pouvez utiliser directement un tableau, see:

CURLOPT_POSTFIELDS Les données complètes pour publier dans une opération de HTTP "POST". [...] Ce paramètre peut être passé comme une chaîne urlencodée comme 'para1 = val1 & para2 = val2 & ...' * ou sous forme de tableau avec le nom du champ comme clé et les données de champ comme valeur. Si la valeur est un tableau, l'en-tête Content-Type sera défini sur multipart/form-data.