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
    Membre averti
    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
    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 confirm�
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    F�vrier 2005
    Messages
    5 503
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 53
    Localisation : France, Val de Marne (�le de France)

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

    Informations forums :
    Inscription : F�vrier 2005
    Messages : 5 503
    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 averti
    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
    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 chevronn�

    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
    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 averti
    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
    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 confirm�
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    F�vrier 2005
    Messages
    5 503
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 53
    Localisation : France, Val de Marne (�le de France)

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

    Informations forums :
    Inscription : F�vrier 2005
    Messages : 5 503
    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 averti
    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
    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 averti
    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
    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 confirm�
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    F�vrier 2005
    Messages
    5 503
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 53
    Localisation : France, Val de Marne (�le de France)

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

    Informations forums :
    Inscription : F�vrier 2005
    Messages : 5 503
    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
    Membre averti
    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
    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