example - request en c#
¿Qué diferencia hay entre las clases WebClient y HTTPWebRequest en.NET? (3)
Sé que es demasiado tiempo para responder, pero solo como un propósito de información para futuros lectores:
WebRequest
System.Object
System.MarshalByRefObject
System.Net.WebRequest
WebRequest
es una clase base abstracta. Entonces realmente no lo usas directamente. Lo usas a través de sus clases derivadas: HttpWebRequest
y FileWebRequest
.
Utiliza el método Create de WebRequest
para crear una instancia de WebRequest
. GetResponseStream
devuelve data stream
.
También hay clases FileWebRequest
y FtpWebRequest
que inherit
de WebRequest
. Normalmente, usted usaría WebRequest
para, bueno, hacer una solicitud y convertir el retorno a HttpWebRequest
, FileWebRequest
o FtpWebRequest
, dependiendo de su solicitud. A continuación hay un ejemplo:
Ejemplo:
var _request = (HttpWebRequest)WebRequest.Create("http://stackverflow.com");
var _response = (HttpWebResponse)_request.GetResponse();
WebClient
System.Object
System.MarshalByRefObject
System.ComponentModel.Component
System.Net.WebClient
WebClient
proporciona operaciones comunes para sending
y receiving
datos de un recurso identificado por un URI
. Simplemente, es una abstracción de alto nivel de HttpWebRequest
. Estas ''operaciones comunes'' son las que diferencian a WebClient
de HttpWebRequest
, como también se muestra en el ejemplo a continuación:
Ejemplo:
var _client = new WebClient();
var _stackContent = _client.DownloadString("http://stackverflow.com");
También hay operaciones DownloadData
y DownloadFile
en la instancia de WebClient
. Estas operaciones comunes también simplifican el código de lo que normalmente haríamos con HttpWebRequest
. Usando HttpWebRequest
, tenemos que obtener la respuesta de nuestra solicitud, instanciar StreamReader
para leer la respuesta y, finalmente, convertir el resultado al tipo que esperemos. Con WebClient
, simplemente llamamos a DownloadData, DownloadFile or DownloadString
.
Sin embargo, tenga en cuenta que WebClient.DownloadString
no considera la encoding
del recurso que solicita. Entonces, probablemente terminarías recibiendo caracteres extraños si no especificas ni codificas.
NOTA: Básicamente, " WebClient toma pocas líneas de código en comparación con Webrequest ".
¿Qué diferencia hay entre las clases WebClient
y HttpWebRequest
en .NET? Ambos hacen cosas muy similares. De hecho, ¿por qué no se fusionaron en una clase (demasiados métodos / variables, etc. pueden ser una razón, pero hay otras clases en .NET que rompe esa regla).
Gracias.
También WebClient no tiene propiedad de tiempo de espera. Y ese es el problema, porque el valor predeterminado es de 100 segundos y eso es demasiado para indicar si no hay conexión a Internet.
La solución para ese problema está aquí https://.com/a/3052637/1303422
WebClient es una abstracción de alto nivel construida sobre HttpWebRequest para simplificar las tareas más comunes. Por ejemplo, si desea obtener el contenido de una HttpWebResponse, debe leer la secuencia de respuesta:
var http = (HttpWebRequest)WebRequest.Create("http://example.com");
var response = http.GetResponse();
var stream = response.GetResponseStream();
var sr = new StreamReader(stream);
var content = sr.ReadToEnd();
Con WebClient, simplemente hace DownloadString
:
var client = new WebClient();
var content = client.DownloadString("http://example.com");
Nota: omití las declaraciones de using
de ambos ejemplos para abreviar. Debería tener cuidado de deshacerse de sus objetos de solicitud web correctamente.
En general, WebClient es bueno para solicitudes sencillas rápidas y sucias, y HttpWebRequest es útil cuando necesita más control sobre la solicitud completa.