Exécution de plusieurs requêtes HTTP à la suite
Bonjour,
Je viens vous demander un peu d'aide car j'ai un problème qui me semble bizarre sur un de mes projets. Je dois faire un GET / , parser la page pour récupérer les images et faire un GET de chaque image pour les sauvegarder. Le problème c'est qu'après 3 GET mon application freeze complètement ..
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
|
// je créé ma requête avec (HttpWebRequest)WebRequest.Create()
HttpWebRequest myHttpWebRequest = HTTPMethod.makeRequest(url + "/");
//j'exécute ma première requete sans soucis avec HttpWebRequest.GetReponse()
HttpWebResponse myHttpWebResponse = HTTPMethod.getResponseSync(myHttpWebRequest,console);
// je parse la réponse pour récupérer une list d'images à récupérer
List<String> imgQueue = HTTPMethod.getObjectsToRequest(myHttpWebResponse);
//puis je fais une boucle pour faire un get sur chacune des mes images :
for(int i = 0; i < imgQueue.Count; i++){
console.AppendText("\t\t " + url + imgQueue[i] + "\n");
myHttpWebRequest = HTTPMethod.makeRequest(url + imgQueue[i]);
console.AppendText("\t\t requete créée \n");
console.ScrollToCaret();
myHttpWebResponse = HTTPMethod.getResponseSync(myHttpWebRequest);
console.AppendText("\t\t retour ok \n");
console.ScrollToCaret();
Thread.Sleep(5000);
} |
Mes deux autres dans HTTPMethod que j'appelle pour créer et exécuter mes requêtes :
Code:
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 40 41 42
|
internal static HttpWebRequest makeRequest(String url, Boolean pipelined = false, Boolean keepAlive = false, String method = "GET")
{
HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://" + url);
request.Method = method;
request.KeepAlive = keepAlive;
request.Pipelined = pipelined;
return request;
}
internal static HttpWebResponse getResponseSync(HttpWebRequest request, System.Windows.Forms.RichTextBox console = null)
{
try
{
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
if (console != null)
{
console.AppendText("\tHTTP Request Headers :\n " + request.Headers + "\n");
console.AppendText("\tHTTP Response Headers :\n" + response.Headers + "\n");
console.AppendText("\t'Pipelined' property is:" + request.Pipelined + "\n");
console.AppendText("\t'Keep-Alive' property is:" + request.KeepAlive + "\n");
console.ScrollToCaret();
}
return response;
}
catch (WebException e)
{
console.AppendText("\tMain Exception raised!\n");
console.AppendText("\tMessage:" + e.Message+"\n");
console.AppendText("\tStatus:" + e.Status + "\n");
}
catch (Exception e)
{
console.AppendText("\tMain Exception raised!\n");
console.AppendText("\tMessage:" + e.Message + "\n");
console.AppendText("\tSource:" + e.Source + "\n");
}
return null;
} |
donc voilà, c'est un code plutôt simple, je ne vois pas pourquoi il ne fonctionne pas après seulement 3 requêtes .. Pour mon test, j'ai 1 page web avec 9 images donc j'arrive à "getter" la page + les deux premières images.
En espérant que quelqu'un puisse me donner un peu d'aide.
merci d'avance