Bouttons indisponibles suite au lancement du proxy FiddlerCore

Résolu
Utilisateur anonyme - Modifié par FaonManager le 10/10/2013 à 18:55
 Utilisateur anonyme - 12 oct. 2013 à 23:25
Bonjour,
je suis en train de développer un petit contrôle parental qui à pour but d'analyser le texte des pages web que l'utilisateur visite afin d'y détecter des mots interdits. J'ai mis des semaines avant d'arriver à faire fonctionner le proxy (issu de l'API FiddlerCore http://fiddler2.com/fiddlercore )analyser, corriger les bugs ... J'ai fini par y arriver. Cependant à quelque jours de lancer la version bêta de mon programme, je me rends compte (je ne sais pas comment c'est arrivé) qu'il y a un gros soucis, c'est que lorsque je lance le proxy Fiddler, les boutons de mon formulaire ne sont plus accessibles ! le programme répond bien mais plus aucun bouton ne marche.
Selon le créateur de Fiddler que j'ai contacté sur le forum officiel, j'utiliserais un événement ou autre qui bloque les "UI thread".
Voilà je ne comprends vraiment pas d'où ça peut venir car si j'essaye de créer mon programme avec juste la fonction d'analyse des pages, tout marche nickel.
Afin de maximiser les chances pour résoudre mon problème, je vous donne les liens du même sujet que j'ai crée sur le support Fiddler.
https://groups.google.com/forum/?fromgroups#!topic/httpfiddler/9lNjD-qzpnA

Sur Developpez ainsi que sur le forum MSDN.
Merci d'avance pour votre aide !
http://www.developpez.net/forums/d1384745/dotnet/langages/vb-net/bouttons-indisponibles-suite-lancement-proxy-fiddlercore/#post7519655
http://social.msdn.microsoft.com/Forums/fr-FR/887d3b32-4a1f-4f63-8e98-8f683c051e01/bouttons-indisponibles-suite-au-lancement-du-proxy-fiddlercore?forum=vbasicfr


    Public Delegate Sub AsyncMethodCaller(sText As String)
    Private Sub ShutdownFiddlerApp()
        FiddlerApplication.Shutdown()
        MsgBox("Unloaded proxy")
        Threading.Thread.Sleep(1000)
    End Sub

    Private Sub FiddlerBeforeRequestHandler(ByVal tSession As Session)
        RichTextBox1.BeginInvoke(New AsyncMethodCaller(AddressOf AddText), tSession.fullUrl)
    End Sub

    Private Sub FiddlerBeforeResponseHandler(ByVal tSession As Session)
    End Sub

    Public Sub VerificationPage()
        Try
            Dim webClient As New System.Net.WebClient
            Dim result As String = webClient.DownloadString(url)
            Dim client As WebClient = New WebClient()
            Dim data As Stream = client.OpenRead(url)
            Dim reader As StreamReader = New StreamReader(data)
            Dim Page As String = reader.ReadToEnd
            ListeMots.AddRange(IO.File.ReadAllLines("C:Users\" & System.Environment.UserName & "DocumentsListeDeMots.txt"))
            Dim found As Boolean = False
            For Each s As String In ListeMots
                If Page.ToLower.Contains(" " & s.ToLower & " ") = True Or Page.ToLower.Contains("<h1>" & s.ToLower & "</h1>") = True Then
                    Dim myProcesses As Process() = Process.GetProcessesByName("firefox")
                    Dim myProcess As Process
                    For Each myProcess In myProcesses
                        myProcess.Kill()
                    Next myProcess

                    Dim myProcesses2 As Process() = Process.GetProcessesByName("iexplore")
                    Dim myProcess2 As Process
                    For Each myProcess2 In myProcesses2
                        myProcess2.Kill()
                    Next myProcess2

                    Dim myProcesses3 As Process() = Process.GetProcessesByName("chrome")
                    Dim myProcess3 As Process
                    For Each myProcess3 In myProcesses3
                        myProcess3.Kill()
                    Next myProcess3

                    Dim myProcesses4 As Process() = Process.GetProcessesByName("opera")
                    Dim myProcess4 As Process
                    For Each myProcess4 In myProcesses4
                        myProcess4.Kill()
                    Next myProcess4
                    RichTextBox1.Clear()

                    MsgBox("Un mot interdit a été détecté :" & s)
                End If

            Next
        Catch
        End Try

    End Sub

    Public Sub VerificationURL()
        Try
            Dim found As Boolean = False
            For Each s As String In ListeMots
                If url.ToLower.Contains("-" & s.ToLower & "-") = True Or url.ToLower.Contains("." & s.ToLower & ".") = True Or url.ToLower.Contains("." & s.ToLower & "-") = True Or url.ToLower.Contains("-" & s.ToLower & ".") = True Then
                    Dim myProcesses As Process() = Process.GetProcessesByName("firefox")
                    Dim myProcess As Process
                    For Each myProcess In myProcesses
                        myProcess.Kill()
                    Next myProcess

                    Dim myProcesses2 As Process() = Process.GetProcessesByName("iexplore")
                    Dim myProcess2 As Process
                    For Each myProcess2 In myProcesses2
                        myProcess2.Kill()
                    Next myProcess2

                    Dim myProcesses3 As Process() = Process.GetProcessesByName("chrome")
                    Dim myProcess3 As Process
                    For Each myProcess3 In myProcesses3
                        myProcess3.Kill()
                    Next myProcess3

                    Dim myProcesses4 As Process() = Process.GetProcessesByName("opera")
                    Dim myProcess4 As Process
                    For Each myProcess4 In myProcesses4
                        myProcess4.Kill()
                    Next myProcess4
                    RichTextBox1.Clear()

                    MsgBox("Un mot interdit a été détecté dans un lien :" & s)

                End If
            Next
        Catch
        End Try
    End Sub

    Private Sub AddText(sText As String)
        RichTextBox1.SelectAll()
        Dim nbrligne As Integer = RichTextBox1.GetLineFromCharIndex(RichTextBox1.SelectionLength())
        If nbrligne > 40 Then
            RichTextBox1.Clear()
        End If
        Dim url2 As Uri
        url2 = New Uri(sText)
        If url2.AbsolutePath.EndsWith(".js") = False And url2.AbsolutePath.EndsWith(".jpg") = False And url2.AbsolutePath.EndsWith(".gif") = False And url2.AbsolutePath.EndsWith(".png") = False And url2.AbsolutePath.EndsWith(".css") = False And url2.AbsolutePath.EndsWith(".ico") = False And url2.AbsolutePath.EndsWith(".jpeg") = False And RichTextBox1.Text.Contains(sText) = False And url2.ToString.Length < 200 = True Then
            RichTextBox1.AppendText(sText & vbCrLf)
            url = sText
            Dim ThreadVerificationPage As New Threading.Thread(AddressOf VerificationPage)
            ThreadVerificationPage.Start()
            Dim ThreadVerificationURL As New Threading.Thread(AddressOf VerificationURL)
            ThreadVerificationURL.Start()
        End If

    End Sub

    Protected Overrides Sub Finalize()
        MyBase.Finalize()
    End Sub
 Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        ' This call is required by the designer.
        InitializeComponent()
        ' Add any initialization after the InitializeComponent() call.
        AddHandler FiddlerApplication.BeforeResponse, AddressOf FiddlerBeforeResponseHandler
        AddHandler FiddlerApplication.BeforeRequest, AddressOf FiddlerBeforeRequestHandler
        AddHandler Application.ApplicationExit, AddressOf ShutdownFiddlerApp
        Dim oFlags As FiddlerCoreStartupFlags = FiddlerCoreStartupFlags.Default
        FiddlerApplication.Startup(0, oFlags)
        MsgBox("Started proxy on port " & FiddlerApplication.oProxy.ListenPort)

    End Sub
    Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
        ShutdownFiddlerApp()
    End Sub

3 réponses

Utilisateur anonyme
11 oct. 2013 à 20:05
Personne pour m'aider ? :'(
Je précise que je peux vous envoyer le projet complet si vous le souhaitez.
0
Utilisateur anonyme
12 oct. 2013 à 19:24
Bonjour,
J'ai trouvé le problème mais pas la solution.

Si j'appelle le proxy avec ce code là, les boutons ne sont plus accessibles.

[CODE] Private Sub ButtonStart_Click(sender As Object, e As EventArgs) Handles ButtonStart.Click
' This call is required by the designer.
InitializeComponent()
' Add any initialization after the InitializeComponent() call.
AddHandler FiddlerApplication.BeforeResponse, AddressOf FiddlerBeforeResponseHandler
AddHandler FiddlerApplication.BeforeRequest, AddressOf FiddlerBeforeRequestHandler
AddHandler Application.ApplicationExit, AddressOf ShutdownFiddlerApp
Dim oFlags As FiddlerCoreStartupFlags = FiddlerCoreStartupFlags.Default
FiddlerApplication.Startup(0, oFlags)
MsgBox("Started proxy on port " & FiddlerApplication.oProxy.ListenPort)
End Sub/CODE

En revanche, si j'appelle le proxy avec ce code (le code d'origine) tout fonctionne parfaitement :

[CODE] Public Sub New()
' This call is required by the designer.
InitializeComponent()
' Add any initialization after the InitializeComponent() call.
AddHandler FiddlerApplication.BeforeResponse, AddressOf FiddlerBeforeResponseHandler
AddHandler FiddlerApplication.BeforeRequest, AddressOf FiddlerBeforeRequestHandler
AddHandler Application.ApplicationExit, AddressOf ShutdownFiddlerApp
Dim oFlags As FiddlerCoreStartupFlags = FiddlerCoreStartupFlags.Default
FiddlerApplication.Startup(0, oFlags)
MsgBox("Started proxy on port " & FiddlerApplication.oProxy.ListenPort)
End Sub/CODE

J'ai fais un projet qui met en évidence le problème, voici le lien :
https://dl.dropboxusercontent.com/u/79764502/FiddlerCoreVB.rar
0
Utilisateur anonyme
12 oct. 2013 à 23:25
J'ai réussi à résoudre mon problème, il fallait laisse le New :
   Public Sub New()
        InitializeComponent()
    End Sub

    Private Sub ButtonStart_Click(sender As Object, e As EventArgs) Handles ButtonStart.Click

            AddHandler FiddlerApplication.BeforeResponse, AddressOf FiddlerBeforeResponseHandler
            AddHandler FiddlerApplication.BeforeRequest, AddressOf FiddlerBeforeRequestHandler
            AddHandler Application.ApplicationExit, AddressOf ShutdownFiddlerApp
            Dim oFlags As FiddlerCoreStartupFlags = FiddlerCoreStartupFlags.Default
            FiddlerApplication.Startup(0, oFlags)
            MsgBox("Started proxy on port " & FiddlerApplication.oProxy.ListenPort)
     End Sub

Merci quand même.
0
Rejoignez-nous