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
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
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 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