httpsendrequest, requête soap sur https axis
Répondre à la discussion
Affichage des résultats 1 à 6 sur 6

httpsendrequest, requête soap sur https axis



  1. #1
    riri95

    httpsendrequest, requête soap sur https axis


    ------

    bonjour,

    on s'est arraché les cheveux aux boulot pour envoyer une requête soap via l'API wininet vers un webservice qui se trouve sur un serveur apache sous axis.
    On a trouvé la solution (qui n'est décrite nul part dans le web) :

    Lorsqu'on utilise httpsendrequest il y a deux paramettres, le header http et la requête soap.
    le premier peut être passé en unicode mais attention, la requête soap, elle, doit être dans un char*. autrement vous aurez une exception error 500 stream closed de la part du serveur.

    le code :

    TCHAR* postheader = _T("Content-Type: text/xml;charset=UTF-8\r\nSOAPAction:\"\"\r\n");

    char * soapReq = "<soap:Envelope xmlns:soap=\"http://www.w3.org/2003/05/soap-envelope\" xmlns:tem=\"http://tempuri.org/\"><soap:Header/><soap:Body> <tem:rechercherUsagers> <tem:Numeropacage>?</tem:Numeropacage> </tem:rechercherUsagers></soap:Body></soap:Envelope>" ;

    DWORD dwlenreq=strlen(soapReq);
    HttpSendRequest(hhttpopenreque st,postheader,lstrlen(posthead er),soapReq,dwlenreq) ;

    -----
    Dernière modification par riri95 ; 22/01/2013 à 09h21.

  2. #2
    riri95

    Re : httpsendrequest, requête soap sur https axis

    le code en entier

    Code:
    #include "stdafx.h"
    #include <windows.h>
    #include <wininet.h>
    #include <stdio.h>
    #include <fstream>
    #include <cstring>
    
    #define SIZE 128
    
    int _tmain(int argc, _TCHAR* argv[])
    {
       
        HINTERNET Initialize,Connection,File;
        TCHAR httpres[10];
    	 DWORD  ResSz = 0;
    	 char* soapRes = 0L;
        Initialize = InternetOpen(_T("Apache-HttpClient/4.1.1 (java 1.5)"),INTERNET_OPEN_TYPE_DIRECT,NULL,NULL,0); 
    
        Connection = InternetConnect(Initialize,_T("monserveur.com"),INTERNET_DEFAULT_HTTPS_PORT,
          L"monlogin",L"monmotdepasse",INTERNET_SERVICE_HTTP,0,0); 
    
    
        File = HttpOpenRequest(Connection,
                                    _T("POST"),
                                    _T("/monwebservice"),
                                    _T("HTTP/1.1"), 
                                    NULL,NULL,
                                     INTERNET_FLAG_SECURE | INTERNET_FLAG_IGNORE_CERT_CN_INVALID | INTERNET_FLAG_IGNORE_CERT_DATE_INVALID |   INTERNET_FLAG_DONT_CACHE | INTERNET_FLAG_IGNORE_REDIRECT_TO_HTTP | INTERNET_FLAG_IGNORE_REDIRECT_TO_HTTPS | INTERNET_FLAG_KEEP_CONNECTION |   INTERNET_FLAG_PRAGMA_NOCACHE
                                    , 0);
    
       TCHAR* postheader = _T("Content-Type: text/xml;charset=UTF-8\r\nSOAPAction:\"\"\r\n");
      char * soapReq = "<soap:Envelope xmlns:soap=\"http://www.w3.org/2003/05/soap-envelope\" xmlns:tem=\"http://tempuri.org/\"><soap:Header/><soap:Body> <tem:rechercherUsagers> <tem:Numeropacage>?</tem:Numeropacage> </tem:rechercherUsagers></soap:Body></soap:Envelope>" ; 
     
    DWORD dwByteslenreq=strlen(soapReq);
    HttpSendRequest(File,postheader,lstrlen(postheader),soapReq,dwByteslenreq) ;
    
          ResSz = 10;
    	HttpQueryInfo( File, HTTP_QUERY_STATUS_CODE , httpres, &ResSz, 0L);
    
             ResSz = 10;
           	HttpQueryInfo( File, HTTP_QUERY_CONTENT_LENGTH, httpres, &ResSz, 0L);
    			soapRes = (char*)LocalAlloc( LPTR, _ttoi( httpres));
    			InternetReadFile( File, soapRes, _ttoi( httpres), &ResSz);
             DeleteFile( _T("soapreply.xml"));
             HANDLE hnd = CreateFile( _T("soapreply.xml"), GENERIC_ALL, 0, 0L, 1, 0x80L, 0);
    			if (hnd != INVALID_HANDLE_VALUE){
    				WriteFile( hnd, soapRes, ResSz, &ResSz, 0L);			
    				CloseHandle( hnd);
    			}
    			LocalFree( reinterpret_cast<HLOCAL>(soapRes));
    	
     
        InternetCloseHandle(File);
        InternetCloseHandle(Connection);
        InternetCloseHandle(Initialize);
    
        return 0;
    
    }
    Dernière modification par JPL ; 22/01/2013 à 16h40. Motif: Ajout de la balise Code (#) pour garder l'indentation

  3. #3
    riri95

    Re : httpsendrequest, requête soap sur https axis

    remarque : comme on est sur un webservice java ya pas de asmx. donc dans l'openrequest vous vous contenté de mettre le nom du webservice.

  4. #4
    riri95

    Re : httpsendrequest, requête soap sur https axis

    si vous envoyé une requête en unicode vous aurez aussi bien une erreur sur un webservice java que sur un webservice asmx.
    le problème n'est pas lié à la technologie qui se trouve en face !

  5. A voir en vidéo sur Futura
  6. #5
    riri95

    Re : httpsendrequest, requête soap sur https axis

    maintenant mon problème consiste à transformer le fichier xml reçu du serveur en un objet. Il va falloir désérialiser !

  7. #6
    riri95

    Re : httpsendrequest, requête soap sur https axis

    pour lire le fichier xml j'ai utilisé le parseur de codesynthesis : http://www.codesynthesis.com/project.../parser/guide/

    une véritable déserialisation manuelle !!!
    il suffit de suivre les étapes du tutoriel à la lettre et tout se passe bien normalement.
    je vous ferais une petite synthèse dés que j'aurais livré le projet (je livre aujourd'hui )!
    Dernière modification par riri95 ; 13/02/2013 à 09h59.

Discussions similaires

  1. Access, requete sur plusieurs tables... besoin d'un coup de main
    Par invite05a67b21 dans le forum Logiciel - Software - Open Source
    Réponses: 2
    Dernier message: 09/07/2011, 17h08
  2. Facebook en Https?
    Par yoda1234 dans le forum Internet - Réseau - Sécurité générale
    Réponses: 23
    Dernier message: 19/02/2011, 08h42
  3. Antépénultième requête sur les Prépas!
    Par invite8324560e dans le forum Orientation après le BAC
    Réponses: 31
    Dernier message: 08/02/2011, 12h19