Перевод машинного кода (кодировка)

Рейтинг: 1Ответов: 1Опубликовано: 17.04.2015

Программа должна передать POST запрос серверу, после чего PHP скрипт отображает данные этого запроса.

Программа отправляет файл, предварительно убедившись, что он весит 40кб. Но в переменной $_POST[param] доходит только 15кб. Данные передаются в UTF8 кодировке. Если передавать цифры [0..9], то они прекрасно доходят и по 100кб. Вот команда для отображения:

echo $_POST[param];

Вот исходник программы на C#:

HttpWebRequest request = (HttpWebRequest)WebRequest.Create(postUrl);
request.Method = "POST";
request.Credentials = CredentialCache.DefaultCredentials;

UTF8Encoding encoding = new UTF8Encoding();

var bytes = System.IO.File.ReadAllBytes(@"Data");
request.ContentType = "application/x-www-form-urlencoded";
request.ContentLength = bytes.Length;

using (var newStream = request.GetRequestStream())
{
    Console.Writeline(bytes.Length); //Размер ДО отправки (равен 40кб)
    newStream.Write(bytes, 0, bytes.Length);
    newStream.Close();
}

Console.Writeline(
    new StreamReader(request.GetResponse().GetResponseStream(), Encoding.UTF8)
        .ReadToEnd()
        .Length);
//Размер ПОСЛЕ отправки (равен 15кб)  

Ответы

▲ 1

Судя по коду, файл отправляется как есть, а не как параметр. Где-то в этом файле есть фрагмент, начинающийся с букв param=, и заканчивающаяся на & либо идущая до конца файла. Вот этот фрагмент после раскодирования и оказывается в 15 Кб.

Если вам нужно запихнуть файл в параметр целиком, то вам надо сначала применить к ему URL-кодирование, а потом дописать в начало param=. Подробности можно прочитать в описании формата application/x-www-form-urlencoded