@KislyFan
инженер, связист и просто любитель выпить

C# Как правильно передать параметры в POST запросе WebRequest?

Пробую создать реквест на форму авторизации, если данные верны - произойдет редирект на другую страницу, если не верны - возвратит форму авторизации.

WebRequest request = WebRequest.Create("http://www.request.com/");
request.Proxy = new WebProxy(new Uri("http://myproxy.ru"));
request.Method = "POST";
request.ContentType = "application/x-www-form-urlencoded";

NameValueCollection outgoingQueryString = HttpUtility.ParseQueryString(String.Empty);

outgoingQueryString.Add("_method", "POST");
outgoingQueryString.Add("data[User][email]", "email@my.ru");
outgoingQueryString.Add("data[User][password]", "QWErty01");

byte[] byteArray = new ASCIIEncoding().GetBytes(outgoingQueryString.ToString());

request.ContentLength = byteArray.Length;
Stream dataStream = request.GetRequestStream();
dataStream.Write(byteArray, 0, byteArray.Length);
dataStream.Close();
WebResponse response = request.GetResponse();

dataStream = response.GetResponseStream();
StreamReader reader = new StreamReader(dataStream);
string responseFromServer = reader.ReadToEnd();

reader.Close();
dataStream.Close();
response.Close();


В responseFromServer нахожу именно форму авторизации, как буд-то данные не верны.

В то же время тот же запрос на JS отрабатывается на отличто
$.ajax({
  type: "POST",
  url: 'http://cora-request.com/',
  data: { '_method': 'POST', "data[User][email]": "email@my.ru", "data[User][password]": "QWErty01" },
  success: function(response){ console.log(response) }
});


Параметры с виду передаются одинаковые
_method=POST&data%5bUser%5d%5bemail%5d=hwac%40my.ru&data%5bUser%5d%5bpassword%5d=QWErty01 -> с#
_method=POST&data%5BUser%5D%5Bemail%5D=hwac%40my.ru&data%5BUser%5D%5Bpassword%5D=QWErty01 -> js


В чем может быть причина ?
  • Вопрос задан
  • 1930 просмотров
Пригласить эксперта
Ответы на вопрос 1
petermzg
@petermzg
Самый лучший программист
Если смотреть документацию по jquery, то по умолчанию в $.ajax используется ContentType со значением 'application/x-www-form-urlencoded; charset=UTF-8'
Значит посылать нужно в UTF-8 данные.

Далее для генерации тела запроса вы применяете NameValueCollection, которая не обеспечивает правильное кодирование специальных символов.
Для правильного создания urlencoded тела запроса лучше использовать класс FormUrlEncodedContent
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы