IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

[Système] Écrire / Lire flux socket SSL


Sujet :

Langage PHP

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    108
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2006
    Messages : 108
    Points : 74
    Points
    74
    Par défaut [Système] Écrire / Lire flux socket SSL
    Bonjour,

    Je dois créer une application web en php, qui doit à un moment pouvoir ouvrir un socket sécurisé par lequelle je devrai faire une requete POST pour l'envoi d'un fichier XML.
    Par la suite, une réponse sous la forme d'un fichier XML sera également écrite sur ce même flux.

    Voila comment je comptais faire le tout:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    $fp = fsockopen($url, $port, $errno, $errstr, 30);
    if($fp) echo "ok";
    else echo"ko";
    if (!$fp) {
       echo "$errstr ($errno)<br />\n";
    } else {
       $out = "Request: POST/https://wwwcie.ups.com/ups.app/xml/Return/1.1\n";
       $out .= "Content-Type: application/x-www-form-urlencoded\n";
       $out .= "Content-Length: strlen($data)\n";
       $out .= $xml_file;
     
    	fwrite($fp, $out);
    	$x = fopen("rma_xml_gen_dir_aa/rep.xml","w");   
      while (!feof($fp)) {
           fputs($x,fgets($fp,256));
       }
       fclose($x);
     
       fclose($fp);
    }
    L'ouverture du socket à l'air de se faire correctement (message: OK d'affiché), je n'ai pas d'erreur lors de l'écriture sur celui ci donc ça semble être ok aussi.

    Mais pour ce qui est de la lecture sur le stream il ya un problème.
    Si je'affiche un msg à chaque itération du while, je peux voir qu'il y rentre pas mal de fois et qu'il lit donc bien quelque chose. Mais dès que j'ouvre mon fichier rep.xml, il est vide...

    Ma question est d'une part de savoir si mon raisonement semble correct pour l'envoit d'un fichier XML par flux ssl. (avec la methode POST...) Et d'une autre part à quoi pourrait être lié le fait qu'il a l'air de lire sur le stream mais n'écrit rien.

    Merci d'avance!

  2. #2
    Membre éprouvé

    Profil pro
    Inscrit en
    Mai 2005
    Messages
    657
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 657
    Points : 910
    Points
    910
    Par défaut
    Salut,

    Je ne connais pas bien HTTPS mais il me semble que c'est du HTTP standard sur un SSL. Ta requete me parait douteuse, en HTTP on fait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    POST /ups.app/xml/Return/1.1 HTTP/1.0      // (ou HTTP/1.1)
    Host: wwwcie.ups.com
    Content-Type: application/x-www-form-urlencoded
    Content-Length: 1234         // on ne peut pas utiliser une fonction dans une chaine entre guillement, il faut concatener -> "Content-Length: ".strlen($data)."\n";
     
    ........ les donnees .........
    Notes que les données sont séparés des headers par 2 retours à la ligne.


    D'autre part pour créer un socket SSL il faut spécifier "ssl://adresse" à fsockopen(), or dans ton exemple tu ne montres pas ce que tu as dans $url, penses à vérifier que c'est bien le cas

    Si tu en as la possibilité utilises plutôt cURL qui gerera tout le protocole HTTP de manière transparente.
    Toute la documentation Ruby on Rails : gotapi.com/rubyrails
    Mes articles :
    > HAML : langage de template pour Ruby on Rails

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    108
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2006
    Messages : 108
    Points : 74
    Points
    74
    Par défaut
    Merci beaucoup je vais tester ça et je te dis ce que ça donne

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    108
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2006
    Messages : 108
    Points : 74
    Points
    74
    Par défaut
    Voila c'est fait.
    Bon tu avais raison ma methode post etait mal écrite et donc je ne recevais aucune réponse, ça tient la route.

    Maintenant je reçois bien une réponse:
    HTTP/1.1 302 Moved Temporarily
    Server: Apache/2.0.46 (Red Hat) mod_ssl/2.0.46 OpenSSL/0.9.7a
    Location: http://www.ups.com/content/not_there
    Content-Length: 220
    Content-Type: text/html; charset=iso-8859-1
    Vary: Accept-Encoding
    Expires: Mon, 11 Dec 2006 13:26:08 GMT
    Cache-Control: max-age=0, no-cache, no-store
    Pragma: no-cache
    Date: Mon, 11 Dec 2006 13:26:08 GMT
    Connection: keep-alive

    <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
    <html><head>
    <title>302 Found</title>
    </head><body>
    <h1>Found</h1>
    <p>The document has moved <a href="http://www.ups.com/content/not_there">here</a>.</p>
    </body></html>
    Donc en gros si j'ai bien compris je fais bien un post mais vers une page qui n'existe sans doute pas. On m'affirme pourtant que c'est la bonne.
    Et d'ailleurs si je vais à l'url https://wwwcie.ups.com/ups.app/xml/Return quelque chose s'affiche...

    Je remet mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    $url = "wwwcie.ups.com";
    $fp = fsockopen("ssl://".$url, $port, $errno, $errstr, 30);
    $out = "POST /https://wwwcie.ups.com/ups.app/xml/Return HTTP/1.1\n";
       $out .= "Host: wwwcie.ups.com\n";
       $out .= "Content-Type: application/x-www-form-urlencoded\n";
       $out .= "Content-Length: ".strlen($xml_file)."\n\n";
       echo $out;
       $out .= $xml_file_access;
       $out .= $xml_file;
     
    	fwrite($fp, $out);
    fclose($fp);
    J'ai tenté l'url sans https:// sans https://wwwcie.ups.com. Et j'ai le meme résultat.

    Peut être est ce ma variable $url qui doit etre differente? Mais je reçois un erreur de fsocketopent() si j'utilise le chemin complet. La seule chose que l'on m'a donné c'est l'url https://wwwcie.ups.com/ups.app/xml/Return.

    Si c'est faisaible avec fsocketopen() j'aimerais continuer comme ça sinon pr Curl ok mais aurais tu un script ou doc me permettant de faire ce que je veux faire?

    Merci encore.

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    108
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2006
    Messages : 108
    Points : 74
    Points
    74
    Par défaut
    Je viens d'essayer de faire un bete formulaire HTML qui envoit un POST vers l'adresse https://wwwcie.ups.com/ups.app/xml/Return. Et la ça marche, enfin ça me renvoit un fichier XML me disant que le contenu n'est pas bon mais le POST fonctionne.

    Mon problème est donc que je ne vais pas à la bonne url. Je ne vois pas comment faire Peut-être est ce dans mon foscketopen() pcq la je ne vois pas vraiment à quoi correspond cette adresse.

    Helppppppppppppp

  6. #6
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 221
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 221
    Points : 15 512
    Points
    15 512
    Par défaut
    pour accéder au bon endroit tu dois mettre "POST /ups.app/..." dans la requête
    tu en dois pas mettre "https://wwwcie.ups.com" parce que ces informatiosn sont seulement utilisées par le navigateur pour trouver la bonne ressource

Discussions similaires

  1. [flux/socket]probleme client
    Par xelif dans le forum Entrée/Sortie
    Réponses: 6
    Dernier message: 12/01/2014, 22h35
  2. (Client/Serveur)Lire flux données avec sockets
    Par tr.hedi dans le forum Développement Web en Java
    Réponses: 1
    Dernier message: 24/02/2013, 23h05
  3. Lire et écrire dans un socket TCP unique
    Par Khan34 dans le forum C++
    Réponses: 4
    Dernier message: 15/03/2012, 15h17
  4. Sockets SSL ( serveur HTTPS )
    Par hexadecime dans le forum Réseau/Web
    Réponses: 4
    Dernier message: 19/10/2007, 19h02
  5. problème de connexion sur un socket SSL
    Par koolway dans le forum Entrée/Sortie
    Réponses: 5
    Dernier message: 21/06/2006, 12h20

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo