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 19/07/2011, 17h12   #1
Invité de passage
 
Inscription : octobre 2010
Messages : 9
Détails du profil
Informations forums :
Inscription : octobre 2010
Messages : 9
Points : 2
Points : 2
Par défaut [cURL] L'envoi d'une requête (exemple fourni)

Bonjour,

J'ai besoin, pour communiquer avec un webservice, d'envoyer ce type de requête http :

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
POST [url] HTTP/1.1
SOAPAction: [action]
Content-Type: multipart/related; type="text/xml"; start="<rootpart@soapui.org>"; boundary="----=_Part_1_25758823.1255425707384"
MIME-Version: 1.0
User-Agent: Jakarta Commons-HttpClient/3.1
Host: localhost:8080
Content-Length: 1072648
 
 
------=_Part_1_25758823.1255425707384
Content-Type: text/xml; charset=UTF-8
Content-Transfer-Encoding: 8bit
Content-ID: <rootpart@soapui.org>
 
<soapenv:Envelope>
 ... trame XML ...
</soapenv:Envelope>
------=_Part_1_25758823.1255425707384
Content-Type: image/jpeg
Content-Transfer-Encoding: binary
 
......................... code binaire de la/les pièce(s) envoyé(es) ..........................
 
------=_Part_1_25758823.1255425707384
La trame XML est créée et est valide pour le webservice. Un envoi avec le client soap de php de ce type fonctionne :
Code :
1
2
$soap = new SoapClient(dirname(__file__).'/wsdl/tutelles.wsdl');
$this->reponse = $soap->__doRequest($this->soapXML,$this->soapURL,$this->soapAction, 1);
Ce code fonctionnait mais ne me permet pas de gérer les pièces jointes.
J'essaye donc d'envoyer la requête http directement avec curl, mais je n'y arrive pas.

Voila ce que je fais :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public function send_curl()
	{
		$curl = curl_init();
		$this->boundary = '------='.(microtime(true) * 100);
		echo $this->boundary;
		$this->soapXML = 'Content-Type: text/xml; charset=UTF-8'.$this->soapXML;
                $curlParam = Array(
			        CURLOPT_URL => $this->soapURL,
			        CURLOPT_POST => true,
			        CURLOPT_SSL_VERIFYPEER => false,
				CURLOPT_RETURNTRANSFER => true,
                                   );
		curl_setopt_array($curl, $curlParam);
		curl_setopt($curl, CURLOPT_POSTFIELDS, Array($this->soapXML));
		curl_setopt($curl, CURLOPT_HTTPHEADER, Array('SOAPAction: "'.$this->soapAction.'"',
													'Content-Type: multipart/related; type="text/xml"; start="<rootpart@soapui.org>"; boundary="'.$this->boundary.'"'));
        if (!($this->reponse = curl_exec($curl)))
                die(curl_error($curl).PHP_EOL);
	}
Bien évidemment ça ne marche pas, et je me suis totalement embrouillé dans ce qu'il faut ou ne pas faire.

Sauriez vous me donner des pistes pour créer correctement cette requête avec cURL ?

Merci à tous !
Khamsin est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/07/2011, 21h24   #2
Membre Expert
 
Avatar de gene69
 
Inscription : janvier 2006
Messages : 951
Détails du profil
Informations personnelles :
Localisation : France

Informations professionnelles :
Secteur : High Tech - Produits et services télécom et Internet

Informations forums :
Inscription : janvier 2006
Messages : 951
Points : 1 063
Points : 1 063
yes. installe wireshark et sniffe les échanges.
__________________
PHP fait nativement la validation d'adresse électronique Vous êtes perdu en PHP? rassurez-vous ici (en)
Utilisez le bouton résolu!
gene69 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/07/2011, 09h40   #3
Invité de passage
 
Inscription : octobre 2010
Messages : 9
Détails du profil
Informations forums :
Inscription : octobre 2010
Messages : 9
Points : 2
Points : 2
Je ne peux pas, puisque l'échange a lieu entre le serveur web et le webservice. À aucun moment l'échange ne passe par ma machine.

Par contre s'il existe un moyen d'afficher les requêtes envoyées par cURL, je suis preneur (le mode verbose ne m'apporte rien de plus).

Idéalement, si quelqu'un sait comment construire correctement une requête http multipart qui fonctionne avec cURL, c'est encore mieux ^^
Khamsin est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/07/2011, 14h50   #4
Membre Expert
 
Inscription : janvier 2007
Messages : 1 452
Détails du profil
Informations personnelles :
Âge : 27
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : janvier 2007
Messages : 1 452
Points : 1 914
Points : 1 914
Hello,

quand tu dis que cela ne fonctionne pas, qu'entends tu par là ?

Sinon, peut être peux tu envoyer ton formulaire sur une page, ou un socket, que tu contrôle, dans cette page tu enregistre les headers reçus.
Ensuite tu regardes ce qu'il raconte.
Ce pourrait déjà être un début de piste.

Pour le socket, j'avais écris un bout de code, pas dasn cette intention mais bon sa pourrait le faire je pense, https://github . com/maboiteaspam/SocketManager

a+
kaymak est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 04h28.


 
 
 
 
Partenaires

Hébergement Web