2010-08-22 5 views
0

J'utilise php 5.2.9 J'ai un tampon XML que je dois publier sur une URL HTTPS.Utilisation de PHP pour publier un tampon XML sur une page HTTPS

Quelle est la bonne façon de procéder? Je vois divers exemples sur le web, et aucun d'entre eux semblent travailler pour moi: Certains définissent les en-têtes de cURL comme ceci:

$headers = array(
     "POST " . $page . " HTTP/1.0", 
     "Content-type: text/xml;charset=\"utf-8\"", 
     "Accept: text/xml", 
     "Cache-Control: no-cache", 
     "Pragma: no-cache", 
     "SOAPAction: \"run\"", 
     "Content-length: ".strlen($buffer), 
    ); 

Où $ page contient la demande sur le serveur et le tampon $ contient la Données XML

Le tampon réelle $ est envoyé comme valeur:

curl_setopt($curl, CURLOPT_POSTFIELDS, $buffer); 

Mais je ne vois pas comment cela peut fonctionner, comme CURLOPT_POSTFIELDS attend sa valeur d'être un tableau et non un tampon.

Puis je vis plusieurs façons de configurer les aspects SSL de l'appel:

curl_setopt($curl, CURLOPT_SSLVERSION,3); 

curl_setopt (curl $, CURLOPT_SSL_VERIFYPEER, false); curl_setopt ($ curl, CURLOPT_SSL_VERIFYHOST, 2); Tous ces éléments sont-ils nécessaires? J'ai vu des exemples où les éléments suivants: a également été

curl_setopt($curl, CURLOPT_HTTPAUTH, CURLAUTH_BASIC); 
curl_setopt($curl, CURLOPT_USERPWD, "username:password"); 

Quelqu'un peut-il afficher un exemple de travail complet qui explique ce qui doit être fait pour poster un tampon XML à l'aide cURL à une URL HTTP?

Merci à l'avance

Répondre

0

Quelques points:

  • Ne pas préciser la méthode de demande avec les autres en-têtes. Utilisez CURLOPT_CUSTOMREQUEST pour cela.
  • Pour envoyer les données, vous avez deux options. Vous pouvez soit implémenter un wrapper de flux qui lit de $buffer que vous ouvrez ensuite avec fopen et donner comme une option CURLOPT_INFILE (bien sûr, si le XML est sur le disque, vous pouvez l'ouvrir directement avec fopen), ou, plus simplement, vous définissez un rappel CURLOPT_READFUNCTION.
  • La partie de vérification de l'homologue n'est nécessaire que si vous souhaitez vérifier la validité du certificat du serveur (vous devez le faire).
  • L'authentification de base est nécessaire si le serveur requiert une authentification de base. Vous seul pouvez le savoir.
+0

J'ai déjà le tampon XML dans les variables $ buffer. Je ne veux pas que le code le lise depuis le disque. Selon la solution de rappel, voici à quoi doit ressembler la fonction: chaîne read_callback (ressource ch, ressource fd, longue) où fd est le descripteur de fichier transmis à CURL par l'option CURLOPT_INFILE. Encore une fois, je ne veux pas travailler avec des fichiers. N'y a-t-il pas une solution plus simple? – user427677

+0

@jason Ce que disent les docs est "Le nom d'une fonction de rappel où la fonction de rappel prend deux paramètres: le premier est la ressource cURL et le second est une chaîne de caractères avec les données à lire. cette fonction de rappel Retourne le nombre d'octets lus Renvoie 0 au signal EOF. " Donc pas de fd. – Artefacto

Questions connexes