Подтвердить что ты не робот

Почему я получаю ошибку 411 Length required?

Вот как я вызываю службу с .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();

но когда этот метод вызывается, я получаю:

Сведения об исключении: System.Net.WebException: Вернулся удаленный сервер ошибка: (411) Требуемая длина.

что мне делать?

4b9b3361

Ответ 1

Когда вы используете метод HttpWebRequest и POST, вам нужно установить контент (или тело, если хотите) через RequestStream. Но, согласно вашему коду, использование authRequest.Method = "GET" должно быть достаточно.

Если вам интересно о формате POST, вот что вам нужно сделать:

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;

Ответ 2

вам нужно добавить Content-Length: 0 в свой заголовок запроса.

показан очень описательный пример того, как тестировать здесь

Ответ 3

Когда вы создаете POST HttpWebRequest, вы должны указать длину данных, которые вы отправляете, например:

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

если вы не отправляете какие-либо данные, просто установите его на 0, это означает, что вам просто нужно добавить к вашему коду эту строку:

request.ContentLength = 0;

Обычно, если вы не отправляете какие-либо данные, вместо этого метод GET является более мудрым, как вы можете видеть в HTTP RFC

Ответ 4

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();

Свойство ContentLength содержит значение для отправки в качестве заголовка Content-length HTTP с запросом.

Любое значение, отличное от -1 в свойстве ContentLength, указывает, что запрос загружает данные и что в свойстве Method могут быть установлены только методы, которые загружают данные.

После того, как свойство ContentLength установлено в значение, это количество байтов должно быть записано в поток запросов, который возвращается путем вызова метода GetRequestStream или обоих методов BeginGetRequestStream и EndGetRequestStream.

для более подробной информации нажмите здесь

Ответ 5

Поиск Google

2-й результат

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

Это довольно распространенная проблема, возникающая при попытке сделать вызов Метод API на основе REST через POST. К счастью, есть простое решение для этот.

Это код, который я использовал для вызова API управления Windows Azure. Этот конкретный вызов API требует, чтобы метод запроса был установлен как POST, однако нет информации, которую необходимо отправить в сервер.

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

Чтобы исправить эту ошибку, добавьте явную длину содержимого к вашему запросу перед вызовом API.

request.ContentLength = 0;

Ответ 6

Эй, я использую Volley и получаю ошибку сервера 411, я добавил к методу getHeaders следующую строку:

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

И он решил мою проблему