Why I get 411 Length required error?

C#.NetHttprequestHttp Status-Code-411

C# Problem Overview


This is how I call a service with .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();

but when this method is invoked, I get:

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

what should I do?

C# Solutions


Solution 1 - C#

When you're using HttpWebRequest and POST method, you have to set a content (or a body if you prefer) via the RequestStream. But, according to your code, using authRequest.Method = "GET" should be enough.

In case you're wondering about POST format, here's what you have to do :

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;

Solution 2 - C#

you need to add Content-Length: 0 in your request header.

a very descriptive example of how to test is given here

Solution 3 - C#

When you make a POST HttpWebRequest, you must specify the length of the data you are sending, something like:

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

if you are not sending any data, just set it to 0, that means you just have to add to your code this line:

request.ContentLength = 0;

Usually, if you are not sending any data, chosing the GET method instead is wiser, as you can see in the HTTP RFC

Solution 4 - C#

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

The ContentLength property contains the value to send as the Content-length HTTP header with the request.

Any value other than -1 in the ContentLength property indicates that the request uploads data and that only methods that upload data are allowed to be set in the Method property.

After the ContentLength property is set to a value, that number of bytes must be written to the request stream that is returned by calling the GetRequestStream method or both the BeginGetRequestStream and the EndGetRequestStream methods.

for more details click here

Solution 5 - C#

Hey i'm using Volley and was getting Server error 411, I added to the getHeaders method the following line :

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

And it solved my issue

Solution 6 - C#

Change the way you requested the method from POST to GET ..

Solution 7 - C#

Google search

2nd result

> System.Net.WebException: The remote server returned an error: (411) Length Required. > > This is a pretty common issue that comes up when trying to make call a > REST based API method through POST. Luckily, there is a simple fix for > this one. > > This is the code I was using to call the Windows Azure Management API. > This particular API call requires the request method to be set as > POST, however there is no information that needs to be sent to the > server.

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

> To fix this error, add an explicit content length to your request > before making the API call. > > request.ContentLength = 0;

Solution 8 - C#

I had the same error when I imported web requests from fiddler captured sessions to Visual Studio webtests. Some POST requests did not have a StringHttpBody tag. I added an empty one to them and the error was gone. Add this after the Headers tag:

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

Solution 9 - C#

We had a very surprising cause to this error: we passed a header in which there was a newline character (in our case an Authorization bearer token header).

Our suspicion is that the newline confused the headers' parser, and made it think there were no additional headers, which caused it to drop important headers like content-length.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionmarkzzzView Question on Stackoverflow
Solution 1 - C#AtlasmaybeView Answer on Stackoverflow
Solution 2 - C#EhsanView Answer on Stackoverflow
Solution 3 - C#SaveView Answer on Stackoverflow
Solution 4 - C#Musakkhir SayyedView Answer on Stackoverflow
Solution 5 - C#shimi_tapView Answer on Stackoverflow
Solution 6 - C#Solomon ThomasView Answer on Stackoverflow
Solution 7 - C#iabbottView Answer on Stackoverflow
Solution 8 - C#Youcef KelanemerView Answer on Stackoverflow
Solution 9 - C#Tama YoshiView Answer on Stackoverflow