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

C# Discussion :

Test de lien https


Sujet :

C#

  1. #1
    Membre �clair�
    Inscrit en
    F�vrier 2006
    Messages
    241
    D�tails du profil
    Informations forums :
    Inscription : F�vrier 2006
    Messages : 241
    Par d�faut Test de lien https
    Bonjour, je viens vers vous pour un probl�me un peu sp�cifique:

    je souhaite tester un grand nombre de lien (environ 500) https (pas de ping de windows) en m�me temps ou dans un intervale de temps r�duit...

    je n'ai jamais utilis� de socket je voudrais savoir quelles classe utiliser pour dans un premier temps tester le lien https et avoir une r�ponse (true/false) si le lien r�pond ou pas .

    Dans un second temps, ex�cuter ces test sur 500 liens diff�rents ?

    merci beaucoup

  2. #2
    Expert confirm�
    Avatar de Skyounet
    Homme Profil pro
    Software Engineer
    Inscrit en
    Mars 2005
    Messages
    6 380
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 38
    Localisation : Etats-Unis

    Informations professionnelles :
    Activit� : Software Engineer
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Par d�faut
    Soit un socket http://msdn2.microsoft.com/fr-fr/lib...84(VS.80).aspx (exemple en fin de page) sur le port HTTPS
    Ou sinon la classe HttpRequest http://msdn2.microsoft.com/en-us/lib...tprequest.aspx mais �a c'est plutot si tu veux interroger ton serveur HTTP

  3. #3
    Membre �clair�
    Inscrit en
    F�vrier 2006
    Messages
    241
    D�tails du profil
    Informations forums :
    Inscription : F�vrier 2006
    Messages : 241
    Par d�faut
    En fait, je voudrais juste int�roger mon serveur https sans �changer de donn�es, je voudrais juste savoir si il r�pond...

  4. #4
    Expert confirm�
    Avatar de Skyounet
    Homme Profil pro
    Software Engineer
    Inscrit en
    Mars 2005
    Messages
    6 380
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 38
    Localisation : Etats-Unis

    Informations professionnelles :
    Activit� : Software Engineer
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Par d�faut
    Ben regarde l'exemple sur la msdn avec les sockets et adapte le, c'est pas tr�s compliqu�.

  5. #5
    Membre �clair�
    Inscrit en
    F�vrier 2006
    Messages
    241
    D�tails du profil
    Informations forums :
    Inscription : F�vrier 2006
    Messages : 241
    Par d�faut
    je vais essayer mais je d�bute, je vais me lancer... Comment est ce que je pourrais faire pour tester plusieurs lien en m�me temps ? faire du quasi temps r�el ?

    je cr� une socket par test mais estce que je peux en ouvrir plusieurs en m�me temps ?

  6. #6
    Membre Expert
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 103
    D�tails du profil
    Informations personnelles :
    �ge : 47
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 103
    Par d�faut
    Dans la mesure ou tu veux faire un test de r�ponse
    tu envoie une requete GET, et t'attend sagement la r�ponse du serveur. S'il est pa d'accord ou s'il est d'accord tu recevra une r�ponse
    HTTP/1.1 200 OK
    ou un truc dans le genre, donc tu peux tr�s bien utiliser HttpRequest.

    Si tu le fait avec les Sockets tu va devoir lire toi meme ce qui est r�cup�r� et le parser... pas top, enfin pas compliqu� non plus cela dit. et il faudra que tu g�re le timeout...

    Pour la concurrence des 500 tests... les threads.
    Le probl�me c'est que si tu fait ouvrir 500 threads au syst�me comme ca d'un coup... il va pas aimer et va prendre un peu de temps... donc utilise les threads de la pool de threads
    ThreadPool a qui tu peux attribuer une t�che.

    tu prend une file de nom/ip a tester et tu prend un simple objet (object) que tu instancie pour servir de monitor d'exclusion mutuelle.

    dans un premier temps tu instancie la file et y met tous le noms � tester.

    Puis tu lance 500 threads de pools avec tous la meme tache (meme d�l�gu� de callback).
    chacun de ces threads se lock sur l'objet d'exclusion mutuel cr��.
    (section lock (objet) { ... })
    dans ce code lock� tu met l'acc�s � la file ou tu d�pile le premier �l�ment � tester.
    ensuite en dehors du code locked (apr�s la fin du bloc lock{}) tu fait ton test par httprequest ou socket.
    a la fin tu met le resultat dans une file... ou une stack de sortie que tu va locker aussi pour �viter que tout le monde n'�crive lise en meme temps dedans ca t'�vitera des d�convenues.
    une fois fait, le d�l�gu� termine normallement et le thread est "libre" et retourne dans la pool a attendre une nouvelle t�che � accomplir.

    avec un thread normal, le code ressemblerais � ca :

    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
     
    private void Process() 
    {
      string iHost;
      bool iResult;
      lock (m_LockQuery) 
      {
        iHost = m_Queries.Pop();
      }
      /// Tes traitements sur l'host obtenu
     
      lock (m_LockResult)
      {
        iHost = m_Result.Push(new KeyValuePair<string, bool>(iHost, iResult));
      }
    }
    ici tu remarquera que je met une association host, bool pour les r�sultats histoire de savoir qui est libre et qui ne l'est pas.
    ton autre code qui essaie d'acc�der � m_Result pour d�piler les �l�ments qui s'y trouve et les traiter doit le faire dans un
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    lock(m_LockResult) { ... }
    �galement sinon tu risque l� aussi de s�v�res d�convenues.

    voila sur le principe c'est assez simple

  7. #7
    Expert confirm�
    Avatar de Skyounet
    Homme Profil pro
    Software Engineer
    Inscrit en
    Mars 2005
    Messages
    6 380
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 38
    Localisation : Etats-Unis

    Informations professionnelles :
    Activit� : Software Engineer
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Par d�faut
    Une connexion est tr�s rapide, tu n'a qu'� faire un boucle et cr�er autant de socket que de test que tu veux faire.

    Il y aurai la solution des threads, mais beaucoup trop couteux donc n'y pense pas (c'est mon avis).

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
     
    pour i = 0 jusqu'à i = 5000
        ouvrir socket
        tester socket
        i++
    fin pour

  8. #8
    Membre �clair�
    Inscrit en
    F�vrier 2006
    Messages
    241
    D�tails du profil
    Informations forums :
    Inscription : F�vrier 2006
    Messages : 241
    Par d�faut
    Merci pour les infos, je vais essayer tout ca !!! j'ai un peu de boulot lol.

    merci encore.

  9. #9
    Membre Expert
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 103
    D�tails du profil
    Informations personnelles :
    �ge : 47
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 103
    Par d�faut
    tu semble oubli� un d�tail...

    la boucle pour les socket c'est long car tu va tester tes 500 connexions l'unes apr�s l'autres...

    de plus un serveur qui est encombr�, ou ne r�pond pas... va occup� ta lecture pendant un temps �lev�... or la norme pour consid�r� une ligne de serveur http comme timeout c'est de l'ordre de 15 � 30s... ca fait beaucoup de temps pour les tester les unes apr�s les autres pour peu qu'il y en est quelques unes qui lag ou ne r�pondent carr�ment pas.

    Utiliser les threads de la pool est moins lourd que d'instancier lui meme les threads.

    De plus il peut faire les tests par lots. je m'explique... au lieu de lancer 500 threads en meme temps, il peut simplement les lancer 10 par 10. Le nombre de threads max que la pool peut utiliser peut etre d�fini et auquel cas... il redonne du travail aux threads qui finissent, jusqu'a ce que la file d'entr�e soit vide.

    Rien de bien sorcier et plus efficace qu'une attente sur les 500 connexions... ne pas oubli� en plus qu'en .NET toute connexion sur socket ou quelqu'autre Stream d'entr�e sont blocantes !!! En gros si tu essaie de lire sur une socket ou ya rien � lire... et bien ton thread reste bloquer comme un con jusqu'a avoir des donn�es � lire. Et meme la lecture asynchrone ne permet pas de totalement r�gler le probleme.

    Les programmes qui font ces scan la plupart du temps en natif, manipulaient les attributs des sockets pour les rendres non blocantes, ce qui permettait de faire plusieurs tests simultann�ments, en plus en natif il existe une commande qui permet de lancer plusieur attentes en lecture sur N sockets avec un timeout. a la fin on r�cup�re les sockets qui ont r�pondues, il suffit donc de lire les donn�es sur la ligne pour savoir si cela correspond � nos attentes... Malheureusement ils n'ont pas pens� � implanter un tel m�canisme en .NET, d'ailleurs dans aucune lib "Objet", au mieux on peut tester socket par socket au lieu de faire un test group� plus rapide, et moins consommateur pour le systeme.

  10. #10
    Membre �clair�
    Inscrit en
    F�vrier 2006
    Messages
    241
    D�tails du profil
    Informations forums :
    Inscription : F�vrier 2006
    Messages : 241
    Par d�faut Test de lien HTTPS
    J'ai une erreur de certificat quand je teste une url de type :
    https://1.1.1.1:0000
    je voudrais savoir si le lien r�pond avec de bout de code :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
                HttpWebRequest req = (HttpWebRequest)WebRequest.Create(URL);
     
                HttpWebResponse res = (HttpWebResponse)req.GetResponse();

Discussions similaires

  1. test un lien http fonctionnel
    Par tintin3158 dans le forum Web
    R�ponses: 2
    Dernier message: 23/03/2014, 12h34
  2. [Upload] copier un fichier (lien http) vers mon site
    Par dinver dans le forum Langage
    R�ponses: 2
    Dernier message: 22/02/2006, 11h21
  3. Test des liens vide sur une base de donn�es
    Par FLANQUART Marie dans le forum ASP
    R�ponses: 1
    Dernier message: 10/11/2005, 14h35

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