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

VB.NET Discussion :

Lire les paramètres internet du navigateur par défaut


Sujet :

VB.NET

  1. #1
    Membre actif
    Inscrit en
    Juillet 2013
    Messages
    777
    Détails du profil
    Informations forums :
    Inscription : Juillet 2013
    Messages : 777
    Points : 275
    Points
    275
    Par défaut Lire les paramètres internet du navigateur par défaut
    Bonjour,

    J'ai remarqué que, si j'utilise l'instruction Process.start(mon_URL) pour accéder à internet, le navigateur web ainsi ouvert prend bien en compte les paramètres Proxy qui se trouvent dans "Options Internet"... ce qui est normal pour ne pas dire évident.

    N'y a-t-il pas moyen de faire en sorte que des instructions du type WebClient.UploadValues récupèrent automatiquement les options internet de l'ordinateur sur lequel elles sont lancées ?

    Cette question est une autre façon d'aborder la problématique soulevée par ce topic qui n'a pas eu beaucoup de succès jusqu'ici.

    C'est clair que ce serait beaucoup plus simple si mon appli pouvait hériter des paramètres du navigateur web plutôt que de demander à l'utilisateur de les re-renseigner pour l'appli spécifiquement, d'autant que cette dernière solution 1°/ suppose de reprogrammer le formulaire de "Options Internet" sur le proxy (config manuelle ou automatique avec fichier PAC selon l'utilisateur) et que 2°/ je n'ai pas compris comment gérer le cas de la config automatique par fichier PAC en VB.NET)

  2. #2
    Modérateur
    Avatar de Sankasssss
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2006
    Messages
    1 842
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 842
    Points : 4 232
    Points
    4 232
    Par défaut
    Bonsoir,

    avec les termes : read Proxy c#
    dans google on trouve pas mal de résultats. Par exemple cette discussion qui nous propose GetSystemWebProxy. Avais-tu déjà exploré cette piste?

  3. #3
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 753
    Points
    39 753
    Par défaut
    Il n'y a rien de spécial à faire, par défaut ça utilise le proxy défini dans IE.

    http://msdn.microsoft.com/fr-fr/library/czdt10d3.aspx

    Si aucun proxy n'est spécifié dans un fichier de configuration et la propriété Proxy ne l'est pas non plus, la classe HttpWebRequest choisit les paramètres proxy hérités de Microsoft Internet Explorer sur l'ordinateur local.
    Seul cas particulier : si le proxy requiert une authentification. Dans ce cas, c'est à toi de fournir les credentials, car ils ne sont pas récupérés automatiquement depuis IE.

  4. #4
    Membre actif
    Inscrit en
    Juillet 2013
    Messages
    777
    Détails du profil
    Informations forums :
    Inscription : Juillet 2013
    Messages : 777
    Points : 275
    Points
    275
    Par défaut
    Ben justement, le pb est que j'ai un proxy au boulot qui nécessite authentification pour sortir de l'intranet.
    Les credentials ne sont pourtant pas stockés sur IE pour le coup. C'est le proxy qui recquiert une authentification. Il n'y a donc pas moyen que la fenêtre de login apparaisse spontanément en temps que de besoin comme pour IE ?

    J'en conclus que la piste de Sankassss ne marche que pour un proxy sans authentification ??

    Pourtant, dans son lien, il y a cette ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      //Request.Proxy.Credentials = CredentialCache.DefaultCredentials;
    Est-ce que cette ligne ne veut pas dire justement que la fenêtre de login va s'ouvrir ?

  5. #5
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 753
    Points
    39 753
    Par défaut
    Citation Envoyé par noftal Voir le message
    Ben justement, le pb est que j'ai un proxy au boulot qui nécessite authentification pour sortir de l'intranet.
    Les credentials ne sont pourtant pas stockés sur IE pour le coup. C'est le proxy qui recquiert une authentification. Il n'y a donc pas moyen que la fenêtre de login apparaisse spontanément en temps que de besoin comme pour IE ?
    Pas vraiment (en tous cas pas à ma connaissance). Tu peux gérer ça en interceptant une erreur HTTP 407 (ProxyAuthenticationRequired), et afficher un dialogue pour demander les credentials à l'utilisateur. Quand l'utilisateur a saisi les credentials, tu peux retenter la requête en définissant le proxy comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Dim proxy = WebRequest.GetSystemWebProxy()
    proxy.Credentials = new NetworkCredential(user, password)
    request.Proxy = proxy
    Citation Envoyé par noftal Voir le message
    J'en conclus que la piste de Sankassss ne marche que pour un proxy sans authentification ??

    Pourtant, dans son lien, il y a cette ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      //Request.Proxy.Credentials = CredentialCache.DefaultCredentials;
    Est-ce que cette ligne ne veut pas dire justement que la fenêtre de login va s'ouvrir ?
    A priori ça ne fonctionne qu'avec l'authentification NTLM, Negotiate ou Kerberos (d'après la doc). Donc si ton proxy utilise ce mode d'authentification, ça marche peut-être, mais si c'est du Basic il faut faire autrement...

  6. #6
    Membre actif
    Inscrit en
    Juillet 2013
    Messages
    777
    Détails du profil
    Informations forums :
    Inscription : Juillet 2013
    Messages : 777
    Points : 275
    Points
    275
    Par défaut
    tomlev, j'ai essayé d'appliquer ta suggestion. Ce serait quelque chose comme cela ?

    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
        Private Sub test()
            Dim oWebClient As New WebClient
     
            Dim sbParameter As New StringBuilder
            With sbParameter
                .Append("form_value_array%5B1%5D%5Belement_id%5D=cfg-element-4-25&")
                .Append("form_value_array%5B1%5D%5Belement_value%5D=testProxy&")
                .Append("form_value_array%5B1%5D%5Belementlabel_id%5D=cfg-element-4-25-label&")
                .Append("form_value_array%5B1%5D%5Belementlabel_value%5D=Client&")
                .Append("form_value_array%5B2%5D%5Belement_id%5D=cfg-element-4-27&")
                .Append("form_value_array%5B2%5D%5Belement_value%5D=raoul@gmail.com&")
                .Append("form_value_array%5B2%5D%5Belementlabel_id%5D=cfg-element-4-27-label&")
                .Append("form_value_array%5B2%5D%5Belementlabel_value%5D=ClientMail&")
            End With
     
            Dim bytArguments As Byte() = Encoding.Default.GetBytes(sbParameter.ToString)
            Dim bytRetData As Byte()
            Dim stReturn As String
     
            oWebClient.Headers.Add("Content-Type", "application/x-www-form-urlencoded")
     
            Try
                bytRetData = oWebClient.UploadData(sURL, "POST", bytArguments)
                stReturn = Encoding.Default.GetString(bytRetData)
     
            Catch ex As WebException
                If ex.Message.Contains("407") Then
                    Dim proxy = WebRequest.GetSystemWebProxy()
                    Dim request As HttpWebRequest
                    request = HttpWebRequest.Create(sURL)
                    proxy.Credentials = New NetworkCredential(sLogin, sPassword)
                    request.Proxy = proxy
                    bytRetData = oWebClient.UploadData(sURL, "POST", bytArguments)
                    stReturn = Encoding.Default.GetString(bytRetData)
                End If
            End Try
     
        End Sub
    End Class
    Dans cet exemple, il s'agit d'aller remplir un formulaire web par la méthode POST.
    Cet exemple marche très bien sans proxy. Je peux le tester chez moi où je n'ai pas de proxy.
    Pour le tester avec proxy, il faut que je le fasse au boulot où je suis derrière un proxy avec authentification pour aller sur le web. Mais au boulot, je n'ai pas accès à mon environnement de développement donc s'il faut que je tatonne pour que ça marche ça va prendre du temps (navette à faire entre mon boulot et chez moi).
    Donc si tu peux me dire ce que tu penses de ce code, cela m'aidera à dégrossir.

    Mes doutes sur ce code concernent la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
                    request = HttpWebRequest.Create(sURL)
    Pour le reste, j'ai bien à l'esprit que la répétition des 2 dernières lignes sera à éviter mais c'est juste pour voir...


    EDIT : à la réflexion j'écrirais plutôt cela pour le catch :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
            Catch ex As WebException
                If ex.Message.Contains("407") Then
     
                    Dim proxy = WebRequest.GetSystemWebProxy()
                    proxy.Credentials = New NetworkCredential(sLogin, sPassword)
                    oWebClient.Proxy = proxy
                    bytRetData = oWebClient.UploadData(sURL, "POST", bytArguments)
                    stReturn = Encoding.Default.GetString(bytRetData)
                End If
            End Try
    Qu'en penses-tu ?

  7. #7
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 753
    Points
    39 753
    Par défaut
    Citation Envoyé par noftal Voir le message
    EDIT : à la réflexion j'écrirais plutôt cela pour le catch :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
            Catch ex As WebException
                If ex.Message.Contains("407") Then
     
                    Dim proxy = WebRequest.GetSystemWebProxy()
                    proxy.Credentials = New NetworkCredential(sLogin, sPassword)
                    oWebClient.Proxy = proxy
                    bytRetData = oWebClient.UploadData(sURL, "POST", bytArguments)
                    stReturn = Encoding.Default.GetString(bytRetData)
                End If
            End Try
    Qu'en penses-tu ?
    Oui c'est plutôt ça... définir le proxy pour une WebRequest qui n'a rien à voir avec ton WebClient, ça ne servirait pas à grand chose

  8. #8
    Membre actif
    Inscrit en
    Juillet 2013
    Messages
    777
    Détails du profil
    Informations forums :
    Inscription : Juillet 2013
    Messages : 777
    Points : 275
    Points
    275
    Par défaut
    OK je teste demain

  9. #9
    Membre actif
    Inscrit en
    Juillet 2013
    Messages
    777
    Détails du profil
    Informations forums :
    Inscription : Juillet 2013
    Messages : 777
    Points : 275
    Points
    275
    Par défaut
    Ok. ça marche !
    Maintenant, pour perfectionner le truc, je souhaiterais savoir s'il est possible de remplacer

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
                   proxy.Credentials = New NetworkCredential(sLogin, sPassword)
    par la boite de dialogue windows qui apparaît toute seule invitant les utilisateurs derrière un proxy nécessitant authentification à rentrer leur login et mot de passe (et à cocher éventuellement l'option visant à mémoriser ces infos dans les 2 champs pour les activations ultérieures ?
    J'insiste sur le fait que cette BdD est une boite Windows. Son apparition est provoquée par le fait d'avoir paramétré un proxy nécessitant authentification.
    Utiliser cette boite sans avoir à la reprogrammer présente l'avantage de ne pas doublonner le stockage du login et mot de passe et de s'appuyer sur la sécurité Windows pour ce stockage.

  10. #10
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 753
    Points
    39 753
    Par défaut
    Citation Envoyé par noftal Voir le message
    Ok. ça marche !
    Maintenant, pour perfectionner le truc, je souhaiterais savoir s'il est possible de remplacer

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
                   proxy.Credentials = New NetworkCredential(sLogin, sPassword)
    par la boite de dialogue windows qui apparaît toute seule invitant les utilisateurs derrière un proxy nécessitant authentification à rentrer leur login et mot de passe (et à cocher éventuellement l'option visant à mémoriser ces infos dans les 2 champs pour les activations ultérieures ?
    J'insiste sur le fait que cette BdD est une boite Windows. Son apparition est provoquée par le fait d'avoir paramétré un proxy nécessitant authentification.
    Utiliser cette boite sans avoir à la reprogrammer présente l'avantage de ne pas doublonner le stockage du login et mot de passe et de s'appuyer sur la sécurité Windows pour ce stockage.
    Là pour le coup je sais pas... c'est peut-être possible, mais je sais pas comment

  11. #11
    Membre actif
    Inscrit en
    Juillet 2013
    Messages
    777
    Détails du profil
    Informations forums :
    Inscription : Juillet 2013
    Messages : 777
    Points : 275
    Points
    275
    Par défaut
    En fait, il ne s'agit pas d'une boite Windows. La boîte est propre à chaque navigateur.
    Mais comme IE est encore quasiment toujours configuré, surtout s'il y a proxy, l'idée est au moins d'aller utiliser ses fonctions qui sont sûrement très abouties, quitte à dire à l'utilisateur d'aller renseigner les "options internet" de IE pour pouvoir utiliser correctement l'appli.

Discussions similaires

  1. QWebView : ouvrir les liens dans le navigateur par défaut
    Par Paramore80 dans le forum Débuter
    Réponses: 1
    Dernier message: 01/03/2013, 13h33
  2. [Débutant] Envoyer et lire les mails de la messagerie par défaut
    Par Najdar dans le forum C#
    Réponses: 2
    Dernier message: 21/01/2013, 21h22
  3. Réponses: 86
    Dernier message: 27/08/2009, 15h02
  4. Réponses: 9
    Dernier message: 21/07/2009, 10h57
  5. Ouvrir une page internet avec navigateur par défaut
    Par m_piou dans le forum Administration système
    Réponses: 2
    Dernier message: 16/01/2008, 23h19

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