Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Error when sending HttpWebRequest from .NET to php site

Despite trying lots of things (see below), I can't get rid of the "Bytes to be written to the stream exceed the Content-Length bytes size specified." error that's thrown in

writer.Close();

This is the code that tries to post data from an ASP.NET to a php site. The script works fine as long as there are no special characters in the code - note the German Umlaut in 'Wörld'.

Uri uri = new Uri("http://mydomain/test.php");
string data = @"data=Hello Wörld";

HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(uri);
request.Method = WebRequestMethods.Http.Post;
request.ContentLength = data.Length;
request.ContentType = "application/x-www-form-urlencoded";
StreamWriter writer = new StreamWriter(request.GetRequestStream()); 
writer.Write(data);
writer.Close();
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
StreamReader reader = new StreamReader(response.GetResponseStream()); 
string tmp = reader.ReadToEnd();
response.Close();
Response.Write(tmp);

I have tried different variations using UTF-8 encodings, like:

request.ContentLength = System.Text.Encoding.UTF8.GetByteCount(data);

and/or

StreamWriter writer = new StreamWriter(request.GetRequestStream(), Encoding.UTF8);

I have also tried to convert the data to UTF-8 before sending it (somewhat ugly):

data = System.Text.Encoding.UTF8.GetString(System.Text.Encoding.Convert(System.Text.Encoding.UTF8, System.Text.Encoding.UTF8, System.Text.Encoding.UTF8.GetBytes(data)));

Yet the error remains. My feeling is that I just don't get the UTF-8 handling right. Any help is greatly appreciated, also any hint where I can find a perfectly working script that posts to php from ASP.NET (server side).

like image 234
Olaf Avatar asked May 03 '26 14:05

Olaf


1 Answers

use

byte[] bdata = Encoding.UTF8.GetBytes(data);

and

request.ContentLength = bdata.Length;

and

Stream writer = request.GetRequestStream(); 
writer.Write(bdata, 0, bdata.Length);
writer.Close();
like image 96
Yahia Avatar answered May 05 '26 02:05

Yahia