В Постмане составил такой запрос. Возвращает то, что нужно. Как теперь воспроизвести это на c#?
Нигде не нашел чтобы в POST запросе передавались сразу и тело и заголовки и параметры. Как правильно сделать?

- 175
- 9
-
Старайтесь пользоваться поиском прежде чем задать вопрос. – aepot Jun 22 '21 at 09:55
2 Answers
Можете использовать RestSharp
using RestSharp;
var client = new RestClient("https://wsdemo......");
var request = new RestRequest("?task=login&view=login"); // Параметры
request.Method = Method.POST;
request.AddHeader("content-type", "application/x-www-form-urlencoded");
request.AddHeader("Cookie", "PHPSESSID=09812");
// request.AddCookie("Cookie","PHPSESSID=09812"); // Или использовать метод AddCookie
request.AddParameter("application/x-www-form-urlencoded",
$"user[login]={login}&user[password]={password}", // Передать логин и пароль
ParameterType.RequestBody);
var response = client.Execute(request);
UPD
Передача логина и пароля в кодировке:
var client = new RestClient("https://wsdemo......");
var request = new RestRequest("?task=login&view=login"); // Параметры
request.Method = Method.POST;
request.AddHeader("content-type", "application/x-www-form-urlencoded");
request.AddParameter("user[login]", login);
request.AddParameter("user[password]", password);
request.AddHeader("Cookie", "PHPSESSID=09812");
var response = client.Execute(request);
- 141
-
Пароль как и логин в открытом виде может сломать запрос, его надо закодировать в %-кодировку. А вообще такие штуки все-таки лучше через
HttpClientделать. Выглядеть будет еще проще. Еще не совсем понятно, зачем в двух местахapplication/x-www-form-urlencoded? Чтоб наверняка? Не хороший ответ. – aepot Jun 22 '21 at 10:42 -
Вы правы, нужно сделать:
request.AddHeader("content-type", "application/x-www-form-urlencoded"); request.AddParameter("user[login]", login); request.AddParameter("user[password]", password);В этом случае логин и пароль передаются в кодированном виде – rahmanny Jun 22 '21 at 12:19
Использовать параметры в POST запросе не нужно и не правильно. Это не GET запрос.
using System.Collections.Generic;
using System.Net.Http;
namespace TestProject
{
class Program
{
static async Task Main(string[] args)
{
string url = "your url";
var content = new FormUrlEncodedContent(new[]
{
new KeyValuePair<string, string>("key", "value"),
new KeyValuePair<string, string>("key2", "value2"),
});
using (HttpClient client = new HttpClient())
{
client.DefaultRequestHeaders.Add("header name", "header value");
client.DefaultRequestHeaders.Add("header name2", "header value2");
var response = await client.PostAsync(url, content);
var result = await response.Content.ReadAsStringAsync();
}
}
}
}
- 49,560
- 66

