2012-06-15 4 views
3

J'ai déjà assemblé du code en utilisant la classe System.net.Webclient pour extraire le code source d'une page Web, sur laquelle j'utilise une recherche de chaîne, pour obtenir des informations spécifiques. Cela fonctionne bien en soi, mais mon problème est que le code source change toutes les quelques secondes, et je voudrais que les données que j'ai reçues pour changer en conséquence. Je comprends que je pourrais simplement mettre en place une boucle pour que ce processus se répète, mais malheureusement mon code actuel prend 2,7 secondes entières à compléter, et je voudrais éviter ce temps de retard important. En outre, je veux éviter de spammer la page Web avec des demandes si possible. Je pensais à un flux qui reste ouvert, de sorte que plusieurs demandes n'auraient pas à être envoyées, mais je n'étais pas tout à fait sûr de savoir comment s'y prendre ...Utiliser C# pour extraire efficacement des données d'une page Web en changeant de code source?

Donc, pour résumer, y at-il un façon que je peux tirer des informations de mise à jour d'un site Web en utilisant l'espace de noms System.Net d'une manière à la fois rapide, et évite de spammer le site avec des demandes?

+2

Quelle est cette source qui change toutes les quelques secondes? –

+0

@jay kreeler Je pense que le mieux que vous puissiez faire est de lancer une requête HEAD toutes les quelques minutes et de vérifier l'en-tête modifié en dernier pour voir si les données ont changé. Mais j'ai peut-être tort. – formatc

+2

@AustinSalonen: Apparemment, ils sont des programmeurs très productifs. –

Répondre

1

Je crains que le protocole HTTP ne soit pas adapté à vos besoins de rafraîchissement des données en temps réel. Autre que l'interrogation avec des requêtes HTTP à intervalles réguliers, vous ne pouvez pas savoir si les données ont changé sur le serveur et obtenir ces nouvelles données.

Par exemple, la technologie WebSocket est plus adaptée à ces scénarios. Bien sûr, le fournisseur de données doit l'implémenter pour que les clients puissent s'abonner à ce flux en direct.

Il existe également une autre manière d'implémenter cette fonctionnalité sur le protocole HTTP. Il utilise un iframe pour implémenter long polling. Voici un example. L'idée est que le serveur utilise un codage par transfert en bloc et envoie des flux de données continus au socket. Le client s'abonne à ce flux et peut être averti des modifications survenues sur le serveur. Encore une fois, c'est une technologie qui doit être implémentée par le serveur pour que vous, en tant que client, puissiez en profiter. Si tout ce que le serveur fournit est des données via la page HTML, vous êtes condamné à faire un scrappage d'écran en martelant ce serveur avec des requêtes HTTP jusqu'à ce que votre adresse IP soit listée et refusée.

+0

Merci beaucoup; cette réponse (bien qu'un peu décevante) répond complètement à ma question. Très apprécié ~ – Ari

Questions connexes