La lecture des données d'un flux HTTP
Je suis en train d'utiliser l' .NET WebRequest/WebResponse classes pour accéder à la Twitter streaming API ici "http://stream.twitter.com/spritzer.json"
.
J'ai besoin d'être en mesure d'ouvrir la connexion et de lire les données de manière incrémentielle à partir de la connexion ouverte.
Actuellement, quand je l'appelle WebRequest.GetResponse
méthode, il bloque jusqu'à ce que la totalité de la réponse est téléchargé. Je sais qu'il est un BeginGetResponse
méthode, mais ce sera juste faire la même chose sur un thread d'arrière-plan. J'ai besoin d'obtenir l'accès au flux de réponse alors que le téléchargement est encore en cours. Ce juste ne semble pas possible pour moi avec ces classes.
Il y a un commentaire spécifique à ce sujet dans le Twitter de la documentation:
"S'il vous plaît noter que certains client HTTP bibliothèques de retourner le corps de la réponse après que la connexion a été fermée par le serveur. Ces clients ne fonctionnera pas pour l'accès à l'API en continu. Vous devez utiliser un client HTTP qui sera de retour de réponse données de manière incrémentielle. Le plus robuste le client HTTP bibliothèques offrent cette fonctionnalité. L'Apache HttpClient va traiter ce cas d'utilisation, par exemple."
Ils point à l'Appache HttpClient, mais cela n'aide pas beaucoup parce que j'ai besoin d'utiliser .NET.
Toute idée de savoir si c'est possible avec WebRequest/WebResponse
, ou dois-je aller pour le bas niveau de la mise en réseau des classes? Peut-être il y a d'autres bibliothèques qui va me permettre de faire cela?
Thx
Allen
OriginalL'auteur user108687 | 2009-07-04
Vous devez vous connecter pour publier un commentaire.
J'ai fini à l'aide d'un TcpClient, qui fonctionne très bien. Serait toujours intéressé de savoir si cela est possible avec WebRequest/WebResponse. Voici mon code au cas où quelqu'un est intéressé:
Oui, HTTP est le protocole orienté. Vous avez besoin de séparer les commandes \r\n.
Est le flux retourné par le client.GetStream() en fait diffusés à partir de la pile réseau ou est-ce juste une mémoire cache de flux?
OriginalL'auteur user108687
BeginGetResponse est la méthode dont vous avez besoin. Il vous permet de lire le flux de réponse de façon incrémentielle:
Ou si vous vous sentez plus à l'aise avec WebClient (personnellement je le préfère sur WebRequest):
J'ai essayé sans succès. Le flux retourné .GetResponseStream() est un MemoryStream contenant l'intégralité du contenu de la réponse.
Dimitrov, Comment faites-vous face aux délais d'attente si il y a de longues périodes de temps entre les données d'entrée dans le ruisseau?
OriginalL'auteur Darin Dimitrov
Avez-vous essayé WebRequest.BeginGetRequestStream() ?
Ou quelque chose comme ceci:
OriginalL'auteur flesh
Suffit d'utiliser
WebClient
. Il est conçu pour les cas simples comme celui-ci où vous n'avez pas besoin de toute la puissance de WebRequest.Oh, vous avez besoin de flux de données? Mon mauvais.
Score négatif... il faut lire la question avant de répondre 🙁
OriginalL'auteur anonymous coward