Je tente de POST contre le serveur d'un fournisseur en utilisant PHP 5.2 avec cURL. Je lis dans un document XML pour poster sur leur serveur, puis la lecture dans une réponse:cURL ajouter des espaces pour poster du contenu?
$request = trim(file_get_contents('test.xml'));
$curlHandle = curl_init($servletURL);
curl_setopt($curlHandle, CURLOPT_POST, TRUE);
curl_setopt($curlHandle, CURLOPT_POSTFIELDS, array('XML'=>$request));
curl_setopt($curlHandle, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($curlHandle, CURLOPT_HEADER, FALSE); # Have also tried leaving this out
$response = curl_exec($curlHandle);
Ce code, dans un lui-même, fonctionne bien, mais l'autre serveur renvoie une réponse à partir de son analyseur XML indiquant :
contenu non autorisé dans Prolog
Je regardai que jusqu'à d'erreur et cela est normalement causée par un espace avant le XML, mais je me suis assuré que le fichier XML lui-même n'a pas d'espace et la garniture () devrait éclaircir cela de toute façon. Je l'ai fait une TCPDump sur la connexion alors que je courais le code et voici ce qui est envoyé:
POST {serverURL} HTTP/1.1
Host: {ip of server}:8080
Accept: */*
Content-Length: 921
Expect: 100-continue
Content-Type: multipart/form-data; boundry:---------------------------01e7cda3896f
---------------------------01e7cda3896f
Content-Disposition: form-data; name="XML"
[SNIP - the XML was displayed]
---------------------------01e7cda3896f--
Avant et après la [SNIP] ligne il y a des espaces visibles lorsque je rejoue la session Ethereal. Est-ce que c'est ce qui cause le problème et, si oui, comment puis-je le supprimer, ou est-ce que je regarde trop loin et cela peut être un problème avec le serveur contre lequel je post?
assurez-vous juste que vous utilisez: curl_setopt ($ curlHandle, CURLOPT_HTTPHEADER, Array ("Content-Type: application/x-www-form-urlencoded; charset = utf-8")); –