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

  1. #1
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    juin 2006
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : juin 2006
    Messages : 27
    Points : 23
    Points
    23

    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
    4 718
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

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

    Informations forums :
    Inscription : février 2005
    Messages : 4 718
    Points : 11 108
    Points
    11 108

    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
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    juin 2006
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : juin 2006
    Messages : 27
    Points : 23
    Points
    23

    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
    Développeur informatique
    Inscrit en
    mars 2015
    Messages
    283
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : mars 2015
    Messages : 283
    Points : 647
    Points
    647

    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
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    juin 2006
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : juin 2006
    Messages : 27
    Points : 23
    Points
    23

    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
    4 718
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

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

    Informations forums :
    Inscription : février 2005
    Messages : 4 718
    Points : 11 108
    Points
    11 108

    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
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    juin 2006
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : juin 2006
    Messages : 27
    Points : 23
    Points
    23

    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
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    juin 2006
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : juin 2006
    Messages : 27
    Points : 23
    Points
    23

    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...

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