returned remote length error c# .net httprequest http-status-code-411

c# - remote - error http 411



¿Por qué recibo el error 411 Length required? (7)

Cuando realiza una POST HttpWebRequest, debe especificar la longitud de los datos que está enviando, algo así como:

string data = "something you need to send" byte[] postBytes = Encoding.ASCII.GetBytes(data); request.ContentLength = postBytes.Length;

si no está enviando ningún dato, simplemente ajústelo a 0, eso significa que solo tiene que agregar a su código esta línea:

request.ContentLength = 0;

Generalmente, si no está enviando ningún dato, elegir el método GET es más prudente, como puede ver en el HTTP RFC

Así es como llamo a un servicio con .NET:

var requestedURL = "https://accounts.google.com/o/oauth2/token?code=" + code + "&client_id=" + client_id + "&client_secret=" + client_secret + "&redirect_uri=" + redirect_uri + "&grant_type=authorization_code"; HttpWebRequest authRequest = (HttpWebRequest)WebRequest.Create(requestedURL); authRequest.ContentType = "application/x-www-form-urlencoded"; authRequest.Method = "POST"; WebResponse authResponseTwitter = authRequest.GetResponse();

pero cuando se invoca este método, obtengo:

Detalles de la excepción: System.Net.WebException: el servidor remoto devolvió un error: (411) Longitud requerida.

¿que debería hacer?


Cuando usa el método HttpWebRequest y POST, debe establecer un contenido (o un cuerpo si lo prefiere) a través de RequestStream. Pero, según su código, usar authRequest.Method = "GET" debería ser suficiente.

En caso de que te estés preguntando sobre el formato POST, esto es lo que tienes que hacer:

ASCIIEncoding encoder = new ASCIIEncoding(); byte[] data = encoder.GetBytes(serializedObject); // a json object, or xml, whatever... HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest; request.Method = "POST"; request.ContentType = "application/json"; request.ContentLength = data.Length; request.Expect = "application/json"; request.GetRequestStream().Write(data, 0, data.Length); HttpWebResponse response = request.GetResponse() as HttpWebResponse;


Hola, estoy usando Volley y estaba obteniendo el error de servidor 411, agregué al método getHeaders la siguiente línea:

params.put("Content-Length","0");

Y resolvió mi problema


Tuve el mismo error cuando importé las solicitudes web de las sesiones capturadas por el violinista a los webtest de Visual Studio. Algunas solicitudes POST no tienen una etiqueta StringHttpBody. Les agregué uno vacío y el error desapareció. Añada esto después de la etiqueta Encabezados:

<StringHttpBody ContentType="" InsertByteOrderMark="False"> </StringHttpBody>


necesita agregar Content-Length: 0 en su encabezado de solicitud.

un ejemplo muy descriptivo de cómo probar se da here


búsqueda de Google

Segundo resultado

System.Net.WebException: The remote server returned an error: (411) Length Required.

Este es un problema bastante común que aparece cuando intentamos llamar a un método API basado en REST mediante POST. Afortunadamente, hay una solución simple para este.

Este es el código que estaba usando para llamar a la API de administración de Windows Azure. Esta llamada de API particular requiere que el método de solicitud se establezca como POST, sin embargo, no hay información que deba enviarse al servidor.

var request = (HttpWebRequest) HttpWebRequest.Create(requestUri); request.Headers.Add("x-ms-version", "2012-08-01"); request.Method = "POST"; request.ContentType = "application/xml";

Para solucionar este error, agregue una longitud de contenido explícito a su solicitud antes de realizar la llamada API.

request.ContentLength = 0;


var requestedURL = "https://accounts.google.com/o/oauth2/token?code=" + code + "&client_id=" + client_id + "&client_secret=" + client_secret + "&redirect_uri=" + redirect_uri + "&grant_type=authorization_code"; HttpWebRequest authRequest = (HttpWebRequest)WebRequest.Create(requestedURL); authRequest.ContentType = "application/x-www-form-urlencoded"; authRequest.Method = "POST"; //Set content length to 0 authRequest.ContentLength = 0; WebResponse authResponseTwitter = authRequest.GetResponse();

La propiedad ContentLength contiene el valor para enviar como encabezado HTTP de Content-length con la solicitud.

Cualquier valor distinto de -1 en la propiedad ContentLength indica que la solicitud carga datos y que solo los métodos que cargan datos pueden establecerse en la propiedad Método.

Después de establecer la propiedad ContentLength en un valor, esa cantidad de bytes se debe escribir en la secuencia de solicitud que se devuelve llamando al método GetRequestStream o a los BeginGetRequestStream y EndGetRequestStream .

para más detalles haga clic here