none
POST запрос с параметрами RRS feed

  • Вопрос

  • Реализую post-запрос на http:

            private HttpWebResponse SendPacketEx(string Url, string request)
            {
                HttpWebRequest httpRequest = (HttpWebRequest)WebRequest.Create(Url);
                httpRequest.Method = "POST";
                httpRequest.ContentType = "application/x-www-form-urlencoded";
                string inputString = HttpUtility.UrlEncode(request, Encoding.GetEncoding("utf-8"));
                byte[] encodedBytes = Encoding.GetEncoding("utf-8").GetBytes(string.Format("message={0}", inputString));
                httpRequest.ContentLength = encodedBytes.Length;
                Stream newStream = httpRequest.GetRequestStream();
                newStream.Write(encodedBytes, 0, encodedBytes.Length);
                newStream.Close();
                return (HttpWebResponse)httpRequest.GetResponse();
            }

    В строке запроса передаю набор параметров и их значений через амперсанд.

    Серверная часть - сервлет, написанный на Java, который стандартными методами парсит полученный запрос, но при этом выдает ошибку "null pointer exception". Анализ поведения сервера приводит к выводу, что параметром в моем запросе считается только один "message", а все, что стоит после знака "=" воспринимается, как его значение, а не как набор параметров, который он должен вычитать.

    Если точно такая же строка запроса посылается через Java - все нормально!

    Подскажите, пожалуйста, как можно решить эту проблему.

    28 октября 2011 г. 12:10

Ответы

  • вот эта строка:

    string inputString = HttpUtility.UrlEncode(request, Encoding.GetEncoding("utf-8"));

    кодирует строку request таким образом, что ее можно будет передать как одно значение параметра или ключа в Url. Т.е. заменяет разделители параметров (&) на их код (%26). Уберите этот энкодинг, и все заработает.

    • Помечено в качестве ответа Abolmasov Dmitry 1 ноября 2011 г. 5:46
    28 октября 2011 г. 12:32
    Модератор