Comment obtenir la source HTML d'une adresse web donnée en C# ?
Remarque : si vous avez besoin de plus de contrôle, consultez la classe HttpWebRequest (par exemple, la possibilité de spécifier l'authentification).
Comment obtenir la source HTML d'une adresse web donnée en C# ?
Vous pouvez télécharger des fichiers avec l'option Classe WebClient :
using System.Net;
using (WebClient client = new WebClient ()) // WebClient class inherits IDisposable
{
client.DownloadFile("http://yoursite.com/page.html", @"C:\localfile.html");
// Or you can get the file content without saving it
string htmlCode = client.DownloadString("http://yoursite.com/page.html");
}
Remarque : si vous avez besoin de plus de contrôle, consultez la classe HttpWebRequest (par exemple, la possibilité de spécifier l'authentification).
Oui, HttpWebRequest vous donne plus de contrôle, bien que vous puissiez faire des demandes POST avec WebClient, en utilisant client.UploadData(uriString, "POST",postParamsByteArray) ;
Ne serait-il pas prudent d'attraper les WebException's autour de cela ? Peut-être que cela a été supposé. D'autres exceptions ou erreurs doivent-elles être capturées avec cette méthode ?
Fondamentalement :
using System.Net;
using System.Net.Http; // in LINQPad, also add a reference to System.Net.Http.dll
WebRequest req = HttpWebRequest.Create("http://google.com");
req.Method = "GET";
string source;
using (StreamReader reader = new StreamReader(req.GetResponse().GetResponseStream()))
{
source = reader.ReadToEnd();
}
Console.WriteLine(source);
La réponse la plus nouvelle, la plus récente, la plus à jour.
Cet article est très ancien (il a 7 ans lorsque j'y ai répondu), donc aucune des autres réponses n'a utilisé la nouvelle méthode recommandée, qui est la suivante HttpClient
classe.
HttpClient
est considérée comme la nouvelle API et doit remplacer les anciennes ( WebClient
y WebRequest
)
string url = "page url";
HttpClient client = new HttpClient();
using (HttpResponseMessage response = client.GetAsync(url).Result)
{
using (HttpContent content = response.Content)
{
string result = content.ReadAsStringAsync().Result;
}
}
pour plus d'informations sur la manière d'utiliser le HttpClient
(en particulier dans les cas asynchrones), vous pouvez vous référer à la classe cette question
NOTE 1 : Si vous voulez utiliser async/await
string url = "page url";
HttpClient client = new HttpClient(); // actually only one object should be created by Application
using (HttpResponseMessage response = await client.GetAsync(url))
{
using (HttpContent content = response.Content)
{
string result = await content.ReadAsStringAsync();
}
}
NOTE 2 : Si vous utilisez les fonctionnalités de C# 8
string url = "page url";
HttpClient client = new HttpClient();
using HttpResponseMessage response = await client.GetAsync(url);
using HttpContent content = response.Content;
string result = await content.ReadAsStringAsync();
Court et agréable ! J'ai trouvé votre suggestion après avoir lu l'exemple de Joe Albahari. LINQPad > Aide > Quoi de neuf, et recherchez Cache.
Var html = new System.Net.WebClient().DownloadString(siteUrl) ; // vous devez créer votre client !
La méthode @cms est la plus récente, suggérée sur le site de MS, mais j'ai eu un problème difficile à résoudre, avec les deux méthodes affichées ici, maintenant je poste la solution pour tous !
problème : si vous utilisez une url comme celle-ci : www.somesite.it/?p=1500
dans certains cas, vous obtenez une erreur de serveur interne (500), bien que dans le navigateur web ce www.somesite.it/?p=1500
fonctionnent parfaitement.
solution : vous devez déplacer les paramètres, le code de travail est :
using System.Net;
//...
using (WebClient client = new WebClient ())
{
client.QueryString.Add("p", "1500"); //add parameters
string htmlCode = client.DownloadString("www.somesite.it");
//...
}
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.