Столкнулся с интересно задачей - требуется на сервер послать параметры и в ответ получить XML.
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(is_card_URL);
request.Method = "POST";
byte[] bytes = Encoding.UTF8.GetBytes(params_);
request.ContentLength = bytes.Length;
using (var stream = request.GetRequestStream())
{
stream.Write(bytes, 0, bytes.Length);
stream.Close();
}
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
Stream stream2 = response.GetResponseStream();
StreamReader reader = new StreamReader(stream2);
string data = reader.ReadToEnd();
reader.Close();
stream2.Close();
Сам код работает, но нужно вместе с УРЛ также послать параметры (допустим, а,b,c) Я пробовал дописывать в УРЛ (...?a=1&b=2&c=3), но сервер не видит параметров, в ответе он пишет, что параметры не переданы.
Подскажите пожалуйста, как в данном случае можно передать параметры на сервер?
Ответ
Параметры для POST запроса передаются немного по-другому:
string postParameters = "a=1&b=2&c=3";
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(is_card_URL);
request.Method = "POST";
request.ContentLength = postParameters.Length;
using (var writer = new StreamWriter(request.GetRequestStream()))
{
requestWriter.Write(postParameters);
}
Если передаваемая строка может содержать недопустимые символы, ее предварительно нужно закодировать:
string parameters = ...;
string postParameters = HttpUtility.UrlEncode(parameters);
Дополнительно можно указать желаемую кодировку:
using (var writer = new StreamWriter(request.GetRequestStream(), Encoding.UTF8))
В общем случае, когда нужно передать произвольные данные, используется байтовый массив:
byte[] postData = ...;
request.ContentLength = postData.Length;
using (var stream = request.GetRequestStream())
{
stream.Write(postData, 0, postData.Length);
}
Тогда пример с передачей строки можно свести к следующему коду:
string parameters = ...;
byte[] postData = Encoding.UTF8.GetBytes(HttpUtility.UrlEncode(parameters));
request.ContentLength = postData.Length;
using (var stream = request.GetRequestStream())
{
stream.Write(postData, 0, postData.Length);
}
Комментариев нет:
Отправить комментарий