Précédent   Forum des professionnels en informatique > PHP > Bibliothèques et frameworks
Bibliothèques et frameworks Forum d'entraide sur les frameworks, templates, bibliothèques de code (PDFLib, eZPdf, JpGraph, Artichow, PEAR, etc). Avant de poster : FAQ bibliothèques, toutes les FAQ PHP et cours bibliothèques
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 20/12/2006, 09h47   #1
Nouveau Membre du Club
 
Inscription : mars 2006
Messages : 108
Détails du profil
Informations forums :
Inscription : mars 2006
Messages : 108
Points : 29
Points : 29
Par défaut [cURL] POST via socket

Bonjour,

Je dois ouvrir un socket (SSL) chez UPS, afin d'écrire une methode POST permettant l'envois d'un fichier XML.

La méthode POST à l'air de fonctionner (je reçois un message d'erreur en retour comme quoi une entité de mon fichier XML n'est pas correcte), mais ce message s'affiche également si je n'envois pas de fichier XML. Etant donné que je suis certain que ce fichier XML est ok (testé chez UPS), le problème doit survenir pendant la transaction.

Voici mon code :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
 
$y = fopen("rrep.txt","w"); 
$sXML = $xml_file;
 
$sRtn = '';
 
$this->sUPSURL = 'https://wwwcie.ups.com/ups.app/xml/Return';   
 
// Send the request to UPS via CURL
$ch = curl_init();// initialize a cURL session
 
curl_setopt($ch, CURLOPT_URL, $this->sUPSURL);  // set the post-tourl
 
curl_setopt($ch, CURLOPT_HEADER, 0);// Header control
 
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,  0);
 
curl_setopt($ch, CURLOPT_VERBOSE, 1);
 
curl_setopt($ch, CURLOPT_POST, 1);   // tell it to make a POST, nota GET
 
curl_setopt($ch, CURLOPT_POSTFIELDS, $sXML);    // put the query string here
 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);    // This allows theoutput to be set into a variable.
curl_setopt($ch, CURLOPT_STDERR, $y);
$sRtn = curl_exec ($ch);// execute the curl session and return the output to a variable.
 
 
curl_close($ch);                                // close the curlsession
 
fclose($y);
La variable $sXML est une string d emon fichier XML.
La valeur de retour, dans mon cas l'erreur est reçue dans $sRtn.

Et le contenu de rep.txt (info sur la transaction) est:
Code x :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
* About to connect() to wwwcie.ups.com:443
* Connected to wwwcie.ups.com (84.53.153.242) port 443
* SSL connection using AES256-SHA
* Server certificate:
*      subject: /CN=wwwcie.ups.com/C=US/ST=New Jersey/L=Mahwah/O=United Parcel Service/OU=UPS Akamai
*      start date: 2006-12-05 17:13:31 GMT
*      expire date: 2007-12-05 17:13:31 GMT
*      common name: wwwcie.ups.com (matched)
*      issuer: /C=US/O=Akamai Technologies Inc/CN=Akamai Subordinate CA 3
> POST /ups.app/xml/Return HTTP/1.1
Host: wwwcie.ups.com
Pragma: no-cache
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, */*
Content-Length: 1794
Content-Type: application/x-www-form-urlencoded

MYXML FILE HERE
< Server: Apache/2.0.46 (Red Hat) mod_ssl/2.0.46 OpenSSL/0.9.7a
< Content-Length: 458
< Content-Type: application/xml
< Expires: Tue, 19 Dec 2006 16:16:53 GMT
< Cache-Control: max-age=0, no-cache, no-store
< Pragma: no-cache
< Date: Tue, 19 Dec 2006 16:16:53 GMT
< Connection: keep-alive
* Connection #0 left intact
* Closing connection #0
Je ne sais d'ailleur pas comment interpreter tout ça.

Si quelqu'un a une idée d'ou peut provenir l'erreur, ça serait bienvenue
lem01 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/12/2006, 11h09   #2
Modérateur
 
Avatar de mathieu
 
Inscription : juin 2003
Messages : 4 893
Détails du profil
Informations forums :
Inscription : juin 2003
Messages : 4 893
Points : 4 466
Points : 4 466
j'ai l'impression que le problème est dans "CURLOPT_POSTFIELDS"
normalement les champs envoyés dans une requêtes POST sont dans le genre "nom1=valeur1&nom2=valeur2" et là tu envois le fichier XML en bloc dedant

donc normallement ton code est dans ce genre :
Code :
curl_setopt($ch, CURLOPT_POSTFIELDS, 'champFichier=' . urlencode($sXML));
à toi de te renseigner ce que tu dois mettre comme nom de champs à la place de "champFichier"
__________________
Modérateur PHP
mathieu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/12/2006, 11h17   #3
Nouveau Membre du Club
 
Inscription : mars 2006
Messages : 108
Détails du profil
Informations forums :
Inscription : mars 2006
Messages : 108
Points : 29
Points : 29
Bah d'apres ce que j'ai compris, non il ne faut pas le mettre sous la forme nom=valeur.
J'ai d'ailleurs parlé avec une personne (non joignable pour l'instant) qui a bossé sur un projet similaire et m'a dit que lui l'avait fait comme ça ...

D'ailleurs j'en ai parlé avec UPS et il ne m'ont jamais parlé de nom de variable, il faut juster l'écrire comme ça sur le socket ...
lem01 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/12/2006, 12h38   #4
Membre confirmé
 
Inscription : janvier 2004
Messages : 242
Détails du profil
Informations forums :
Inscription : janvier 2004
Messages : 242
Points : 245
Points : 245
Curl m'a bien pris la tete en php, j'ai fini par utiliser curl la version executable et depuis plus aucun probleme
chaced est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/12/2006, 16h38   #5
Nouveau Membre du Club
 
Inscription : mars 2006
Messages : 108
Détails du profil
Informations forums :
Inscription : mars 2006
Messages : 108
Points : 29
Points : 29
Simple erreur de ma part (je ne lisais pas le bon fichier réponse)
lem01 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 15h51.


 
 
 
 
Partenaires

Hébergement Web