Ошибка при отправке HttpWebRequest из .NET на сайт php - PullRequest
3 голосов
/ 12 сентября 2011

Несмотря на множество попыток (см. Ниже), я не могу избавиться от "байтов, которые будут записаны в поток, превышают указанный размер байтов Content-Length." ошибка, выдаваемая

writer.Close();

Это код, который пытается отправить данные из ASP.NET на сайт php. Сценарий работает нормально, пока в коде нет специальных символов - обратите внимание на немецкий умлаут в '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);

Я пробовал разные варианты, используя кодировки UTF-8Например:

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

и / или

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

Я также пытался преобразовать данные в UTF-8 перед их отправкой (несколько уродливо):

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

И все же ошибка остается.У меня такое ощущение, что я просто не понимаю, как работает UTF-8.Будем благодарны за любую помощь, а также за любую подсказку, где я могу найти отлично работающий скрипт, который отправляет php из ASP.NET (на стороне сервера).

1 Ответ

7 голосов
/ 12 сентября 2011

использовать

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

и

request.ContentLength = bdata.Length;

и

Stream writer = request.GetRequestStream(); 
writer.Write(bdata, 0, bdata.Length);
writer.Close();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...