Nicodelphi
Messages postés82Date d'inscriptionvendredi 19 janvier 2007StatutMembreDernière intervention19 janvier 2014
-
14 août 2008 à 15:19
TeBeCo
Messages postés467Date d'inscriptionlundi 24 juin 2002StatutMembreDernière intervention 9 mars 2011
-
19 août 2008 à 13:23
Bonjour voila j'ai developper avec un Httplistener un proxy pour recuerer les adresse web jusqu'ici pas de probleme mais comment faire pour retourner l'adresse au navigateur pour afficher la page car quand je veut acceder a une page mon navigateur se bloque puisqu'il attend un reponse du proxy
static void Main()
{
HttpListener listener = new HttpListener();
listener.Prefixes.Add("http://127.0.0.1/");
listener.Start();
Console.WriteLine("En ecoute...");
for (; ; )
{
HttpListenerContext ctx = listener.GetContext();
new Thread(new Worker(ctx).ProcessRequest).Start();
}
}
class Worker
{
private HttpListenerContext context;
public Worker(HttpListenerContext context)
{
this.context = context;
}
public void ProcessRequest()
{
string msg = context.Request.Url.ToString();
Console.WriteLine(msg);
context.Response.Close();
}
a Console.WriteLine(msg) j'ai bien l'adresse du site que je veut visiter mais apres comment indiquer au navigateur de m'afficher la page merci
TeBeCo
Messages postés467Date d'inscriptionlundi 24 juin 2002StatutMembreDernière intervention 9 mars 2011 19 août 2008 à 13:23
Console.WriteLine("En ecoute...");
for (; ; )
{
HttpListenerContext ctx = listener.GetContext();
new Thread(new Worker(ctx).ProcessRequest).Start();
}
}
a mon avis tu devrais remplacer tout ce code par l'utilisation des .BeginGetContext / EndgetContext
qui evitera de freeze mechament ton appli, bouffer du temps CPU et plein d'autre chose qui tourne sur ce meme thread ....
pour faire un equivalent de boucle en asynchrone il suffit de relancer un .BeginGet...() juste apres le .EndGet....() comme ca chaque acceptation relance une attente et ca se fait sur des thread separer que celui qui a lancer le process
Par contre en lisant le code j'arrive pas a bien voir comment est utiliser ta classe "worker" puisse que le Main() en fait rien ou alors t'as omis une partie des explication de plus la methode de bloquage n'est pas tout a fait clair alors je vais repondre dans l'a peu pres ...
* dump du html / cache + creation en local + affichage ?
* lecture des header HTTP ? avec la valeur "Location" qui indique l'url ?
* eviter de bloquer un contexte d'execution avec des boucle infinie completement non necessaire ?