Respuestas:
WebClient es una abstracción de nivel superior construida sobre HttpWebRequest para simplificar las tareas más comunes. Por ejemplo, si desea obtener el contenido de un HttpWebResponse, debe leer el flujo 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, solo haces DownloadString
:
var client = new WebClient();
var content = client.DownloadString("http://example.com");
Nota: omití las using
declaraciones de ambos ejemplos por brevedad. Definitivamente, debe tener cuidado de deshacerse de sus objetos de solicitud web correctamente.
En general, WebClient es bueno para solicitudes simples rápidas y sucias y HttpWebRequest es bueno para cuando necesita más control sobre toda la solicitud.
HttpClient
que viene con .NET 4.5 que puede (o puede que no) resolver algunas de las molestias anteriores ...
using (WebClient client = new WebClient())
Además, WebClient no tiene propiedad de tiempo de espera. Y ese es el problema, porque el valor predeterminado es 100 segundos y eso es demasiado para indicar si no hay conexión a Internet.
La solución para ese problema está aquí https://stackoverflow.com/a/3052637/1303422
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
El WebRequest
es una clase base abstracta. Así que en realidad no lo usas directamente. Lo usas a través de sus clases derivadas, HttpWebRequest
yFileWebRequest
.
Utiliza el método Create de WebRequest
para crear una instancia de WebRequest
. GetResponseStream
devolucionesdata stream
.
También hay FileWebRequest
y FtpWebRequest
clases que inherit
desde WebRequest
. Normalmente, solía WebRequest
, bueno, hacer una solicitud y convertir la devolución a cualquiera HttpWebRequest
, FileWebRequest
oFtpWebRequest
depender de su solicitud. A continuación se muestra un ejemplo:
Ejemplo:
var _request = (HttpWebRequest)WebRequest.Create("http://stackverflow.com");
var _response = (HttpWebResponse)_request.GetResponse();
Cliente web
System.Object
System.MarshalByRefObject
System.ComponentModel.Component
System.Net.WebClient
WebClient
proporciona operaciones comunes sending
y receiving
datos de un recurso identificado por a URI
. Simplemente, es una abstracción de nivel superior de HttpWebRequest
. Estas "operaciones comunes" es lo que diferencia WebClient
deHttpWebRequest
, como también se muestra en el ejemplo siguiente:
Ejemplo:
var _client = new WebClient();
var _stackContent = _client.DownloadString("http://stackverflow.com");
También hay DownloadData
y DownloadFile
operaciones bajo WebClient
instancia. Estas operaciones comunes también simplifican el código de lo que normalmente haríamos HttpWebRequest
. Usando HttpWebRequest
, tenemos que obtener la respuesta de nuestra solicitud, instanciarStreamReader
para leer la respuesta y finalmente, convertir el resultado al tipo que esperamos. Con WebClient
, simplemente llamamosDownloadData, DownloadFile or DownloadString
.
Sin embargo, tenga en cuenta que WebClient.DownloadString
no considera elencoding
el recurso que está solicitando. Por lo tanto, probablemente terminaría recibiendo caracteres extraños si no especifica y codifica.
NOTA: Básicamente " WebClient toma pocas líneas de código en comparación con Webrequest "
webClient.UploadData(url, "POST", bytes)
para especificar el método (ver documentos de MSDN ).
ServicePointManager.Expect100Continue = false
, hacer otras cosas no estándar y tener muchas peculiaridades e idiosincrasias. Comencé RestSharp para ayudar a suavizar esos problemas.