Page 1 sur 1

fsockopen() erreur d'initialisation de la socket

Posté : 17 janv. 2007, 20:29
par stefane321
Bonjour,

Je veux établir une connection avec Poste Canada pour leur module de coût de transport.

J'obtiens toujours l'erreur 0

Sur php.net sa dit :
Si l'erreur retournée est 0 et que la fonction retourne FALSE, c'est une indication d'erreur. C'est probablement dû à une erreur d'initialisation de la socket.
Qu'est-ce que je fait de pas correct?

Voici mon code:
 $open=fsockopen('cybervente.postescanada.ca', 30000, $errno, $errstr, 30);
 if (!$open) {
   echo "$errstr ($errno)<br />\n";
 } 
 else {
   $out = "GET / HTTP/1.1\r\n";
   $out .= "Host: www.example.com\r\n";
   $out .= "Connection: Close\r\n\r\n";

   fwrite($open, $out);
   while (!feof($open)) {
       echo fgets($open, 128);
	   
   }
   fclose($open);
}
Merci!

Posté : 18 janv. 2007, 08:47
par Ripat
Bonjour,

D'après le site que tu renseignes, le serveur attend une requête POST en HTTP. Tu dois donc leur envoyer une demande formatée pour recevoir une réponse. La connexion sur le port 30000 ne semble pas poser de problème.

Ils donnent un exemple de requête sur leur site. Le petit test suivant fonctionne correctement:
<?php

// preparation de la requête (POST)
$post='
<?xml version="1.0" ?>
<eparcel>
  <language> fr </language>
  <ratesAndServicesRequest>
    <merchantCPCID> CPC_DEMO_XML </merchantCPCID>
    <fromPostalCode> M1P1C0 </fromPostalCode>
    <turnAroundTime> 24 </turnAroundTime>
    <itemsPrice> 0.00 </itemsPrice>
    <lineItems>
      <item>
        <quantity> 1 </quantity>
        <weight> 1.491 </weight>
        <length> 1 </length>
        <width> 1 </width>
        <height> 1 </height>
        <description> Disquettes KAO </description>
      </item>
    </lineItems>
    <city>  </city>
    <provOrState> Wisconsin </provOrState>
    <country> CANADA </country>
    <postalCode> H3K1E5 </postalCode>
  </ratesAndServicesRequest>
</eparcel>';

// initialisation variable et ouverture du socket
$page='';
$fp=fsockopen('cybervente.postescanada.ca', 30000, $errno, $errstr, 5);
if (!$fp) {
  echo "$errstr ($errno)<br />\n";
} 
else {

  // construction du header
  $header  = "POST / HTTP/1.1\r\n";
  $header .= "Host: cybervente.postescanada.ca\r\n";
  $header .= "User-Agent: PHP Script\r\n";
  $header .= "Content-Type: application/x-www-form-urlencoded\r\n";
  $header .= "Content-Length: ".strlen($post)."\r\n";
  $header .= "Connection: Close\r\n\r\n";

  // adjonction du POST au header
  $header .= $post;

  // envoi du header
  fputs($fp, $header);

  // lecture de la réponse et fermeture du socket
  while (!feof($fp)) {
    $page.= fgets($fp, 256);
  }
  fclose($fp);
}

// affichage du le réponse
echo htmlentities($page);

?>