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

MFC Discussion :

comment ouvrir une connexion https


Sujet :

MFC

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    rpsi
    Inscrit en
    Juin 2006
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : rpsi

    Informations forums :
    Inscription : Juin 2006
    Messages : 28
    Points : 27
    Points
    27
    Par défaut comment ouvrir une connexion https
    Bonjour,
    Je ne suis pas sûr de publier sur le bon forum...
    Je ne suis pas familier des connexions HTTPS (environnement mfc/c++ natif)
    Mon sujet est de fabriquer un code pour se connecter à un fournisseur de service pour envoyer un ou plusieurs SMS. (page du fournisseur: https://developers.esendex.com/api-r...sagedispatcher )
    Ce code me renvoi "impossible d'établir une connexion avec le serveur" sur "pFile->SendRequestEx(strData.GetLength());"
    Je ne sais pas trop d'ou peut venir le problème... Le message d'erreur étant très vague... (Impossible d'établir une connexion avec le serveur)
    Pouvez vous m'aider ?

    NB: J'ai aussi essayé avec la version "session authentication" (page du fournisseur https://developers.esendex.com/api-r...authentication ), mais j'ai exactement le même problème sur la requête "POST" sensé demandé le jeton d'authentification...

    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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
     
    CString strData="<messages><accountreference>moncompte</accountreference><message><to>0611223344</to><body>texte du SMS</body></message></messages>";
    CInternetSession session("SMS");
    CHttpConnection *pSession=NULL;
    CHttpFile *pFile=NULL;
    int sockFail=0;
     
     
    try
    {
        pSession=session.GetHttpConnection(192.168.5.5,INTERNET_FLAG_SECURE,80,NULL,NULL);
    }
    catch(CInternetException *pEx)
    {
        TCHAR sz[1024];
        pEx->GetErrorMessage(sz,1024);
            AfxMessageBox(sz,MB_ICONEXCLAMATION|MB_OK|MB_DEFBUTTON1);
        pEx->Delete();
    }
     
     
    if(pSession)
    {
        CString header;
        header="Content-Type: application/xml\r\n";
        header+="<?xml version='1.0' encoding='UTF-8'?>\r\n";
        header+="Authorization: Basic ";
        //{
        //    char szBuffer[1024];
        //    CString strTmp;
        //    strTmp.Format("%s:%s",
        //                  static_cast<LPCTSTR>(theApp.m_strEsendexUser),
        //                  static_cast<LPCTSTR>(theApp.m_strEsendexPassword));
        //    StrToBase64(strTmp,szBuffer);
        //    header+=szBuffer;
        //}
        header+="user + mdp en base 64 (vérifié: le pb ne semble pas être ici)";
        header+="\r\n";
        try
        {
            DWORD dwFlags=INTERNET_FLAG_SECURE|INTERNET_FLAG_IGNORE_CERT_DATE_INVALID|INTERNET_FLAG_IGNORE_CERT_CN_INVALID;
            pFile=pSession->OpenRequest(CHttpConnection::HTTP_VERB_POST,"https://api.esendex.com/v1.0/messagedispatcher",/*pstrReferer*/0,/*dwContext*/1,/*ppstrAcceptTypes*/0,"HTTP/1.1",dwFlags);
        }
        catch(CInternetException *pEx)
        {
            TCHAR sz[1024];
            pEx->GetErrorMessage(sz,1024);
            AfxMessageBox(sz,MB_ICONEXCLAMATION|MB_OK|MB_DEFBUTTON1);
            pEx->Delete();
        }
    }
    if(pFile)
    {
        try
        {
            pFile->AddRequestHeaders(header);
        }
        catch(CInternetException *pEx)
        {
            TCHAR sz[1024];
            pEx->GetErrorMessage(sz,1024);
            AfxMessageBox(sz,MB_ICONEXCLAMATION|MB_OK|MB_DEFBUTTON1);
            pEx->Delete();
        }
        try
        {
            pFile->SendRequestEx(strData.GetLength());
            pFile->WriteString(strData);
            pFile->EndRequest();
        }
        catch(CInternetException *pEx)
        {
            TCHAR sz[1024];
            pEx->GetErrorMessage(sz,1024);                    // ici, sz="Impossible d'établir une connexion avec le serveur"
            AfxMessageBox(sz,MB_ICONEXCLAMATION|MB_OK|MB_DEFBUTTON1);
            pEx->Delete();
        }
        CString retHeader;
        pFile->QueryInfo(HTTP_QUERY_STATUS_CODE,retHeader,0);
        if(retHeader!="200")
        {
            sockFail=1;
        }
        else
        {
            CString buff;
            while(pFile->ReadString(buff))
            {
                strResponse+=buff;
                strResponse+="\n";
                buff.Empty();
            }
        }
        pFile->Close();
        delete pFile;
        pSession->Close();
        delete pSession;
    }

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 156
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 156
    Points : 12 269
    Points
    12 269
    Par défaut
    Un bricolage :
    https://stackoverflow.com/questions/...ing-https-in-c
    Sinon, utilisez une librairie réseau plus récente ne ferait pas de mal.

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    rpsi
    Inscrit en
    Juin 2006
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : rpsi

    Informations forums :
    Inscription : Juin 2006
    Messages : 28
    Points : 27
    Points
    27
    Par défaut
    Bonjour,
    le code montré ici ressemble beaucoup au mien...
    D'ailleurs, une fois appliquée les quelques différences, j'obtiens le même résultat...
    Quand à la librairie, pourquoi pas. mais laquelle ?
    Et est ce bien nécessaire pour ce qui me semble être quelque chose que devait déjà traiter les MFC...

  4. #4
    Membre confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2015
    Messages
    294
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mars 2015
    Messages : 294
    Points : 558
    Points
    558
    Par défaut
    bonjour si tu veux une librairie plus récente, dans mon avant derniere societe, j'ai fait un logiciel avec l'api C++ rest sdk de Microsoft

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    rpsi
    Inscrit en
    Juin 2006
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : rpsi

    Informations forums :
    Inscription : Juin 2006
    Messages : 28
    Points : 27
    Points
    27
    Par défaut
    j'ai avancé d'un pas: apparemment, il faut utiliser le port 443 au lieu du 80
    Maintenant, mon message d'erreur est "L'autorité de certification n'est pas valide ou correcte"

  6. #6
    Expert éminent sénior
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 156
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 156
    Points : 12 269
    Points
    12 269
    Par défaut
    j'ai avancé d'un pas: apparemment, il faut utiliser le port 443 au lieu du 80
    Heu, c'était tellement évident que j'avais même pas fait la remarque.
    C'est loin d'être trivial et les MFC n'ont jamais été une "vraie" librairie réseau, et encore moins à même de gérer les certificats souvent nécessaire en https.
    Franchement, faire du réseau avec les MFC, c'est vraiment proche du masochisme.
    https://stackoverflow.com/questions/...etwork-library

    Mais juste pour HTTP/HTTPS, libcurl est plus simple :
    https://stackoverflow.com/questions/...-certificate-a

    Après, si même votre navigateur Web n'arrive pas à s'y connecter, c'est qu'il vous manque pas mal de truc comme des certificats, clés ou autres machins indiqués dans leur documentation, potentiellement.

    Commencez pour vous y connecter avec votre navigateur Web.

  7. #7
    Nouveau membre du Club
    Homme Profil pro
    rpsi
    Inscrit en
    Juin 2006
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : rpsi

    Informations forums :
    Inscription : Juin 2006
    Messages : 28
    Points : 27
    Points
    27
    Par défaut
    En fait, j'ai le même problème quand j'utilise le service du même fournisseur sur HTTP au lieu de HTTPS...
    Dans ce cas, en tapant l'url http://api.esendex.com/v1.0/messagedispatcher dans un navigateur, j'ai l'erreur 404..
    Ce genre de manip est adéquate quand une authentification est demandée ?
    Comme déjà dit plus haut, je n'ai pas l'habitude des connexions via requete HTTP (et encore moins en HTTPS...)
    [Edit]: Le fournisseur de service m'a indiqué que ceci était normal...

  8. #8
    Nouveau membre du Club
    Homme Profil pro
    rpsi
    Inscrit en
    Juin 2006
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : rpsi

    Informations forums :
    Inscription : Juin 2006
    Messages : 28
    Points : 27
    Points
    27
    Par défaut
    J'ai avancé d'un autre pas...
    J'ai remplacé dans GetHttpConnection l'adresse du serveur par l'url du fournisseur de service "asi.esendex.com"
    Jusqu'à maintenant, je pensais qu'il s'agissait de mon serveur par qui transitait la requête...
    Du coup, l'instruction SendRequestEx ne déclenche plus d'exception
    Maintenant, l'instruction QueryInfo me retourne une erreur 400 (bas request)
    J'ai donc avancé d'un pas, mais je ne comprends toujours pas en quoi la requête que je forme n'est pas correcte...

  9. #9
    Expert éminent sénior
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 156
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 156
    Points : 12 269
    Points
    12 269
    Par défaut
    Mon DNS ne connait pas "asi.esendex.com", c'est plutôt "api.esendex.com", non ?
    "api.esendex.com" me donne un 404 si j'attaque sa racine.

    Pourquoi ne pas suivre la documentation ???
    https://developers.esendex.com/api-r...authentication

    Si vous utilisez des librairies réseaux plus modernes vous pourrez implémenter ces méthodes d'authentification plus simplement.

  10. #10
    Nouveau membre du Club
    Homme Profil pro
    rpsi
    Inscrit en
    Juin 2006
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : rpsi

    Informations forums :
    Inscription : Juin 2006
    Messages : 28
    Points : 27
    Points
    27
    Par défaut
    Bonjour,
    Désolé, c'est une erreur de frappe: il s'agit bien de api.esendex.com
    Entre temps, je suis arrivé à mes fins par d'autre biais (une dll en v6 proposée par esendex...) (et aussi un autre fournisseur de service qui a pu me fournir un exemple...)
    Mais, çà m'intéresse quand même: j'avais déjà suivi la doc (indiqué dans mon premier message...), mais c'est l'utilisation de cette doc via GetHttpConnection, OpenRequest, AddRequestHeaders, SendRequest ou SendRequestEx et QueryInfo qui me posait problème...
    Notamment, comment répartir la requête indiquée entre openrequest et addrequestheaders
    Salutations

Discussions similaires

  1. Comment ouvrir une connexion sur une BD FireBird
    Par colorid dans le forum Bases de données
    Réponses: 15
    Dernier message: 18/02/2014, 18h41
  2. comment ouvrir une page httpS
    Par alain16 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 07/07/2013, 17h28
  3. Réponses: 0
    Dernier message: 05/10/2009, 16h25
  4. TTreeView -> Comment ouvrir une unité ?
    Par DaLove dans le forum C++Builder
    Réponses: 2
    Dernier message: 08/12/2002, 11h30
  5. Réponses: 1
    Dernier message: 31/10/2002, 11h55

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