fallen8rwtf
@fallen8rwtf

Как подставить header в POST, C#?

Привет!
Совсем чайник в C#, но срочно нужно написать небольшую консольную утилиту, которая вернет ответ от сервера
Пока что удалось нагуглить, это вот такой кусок, который не работает
Мне возвращается "401: Unauthorized". Насколько понимаю, заголовок не передается

p.s.:
Нужен самый простой код, который будет слать POST с body и своим header, чтобы получать ответ от сервера. Буду очень признателен за помощь!

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Net.Http;
using System.Net;
using System.Collections.Specialized;


namespace ConsoleApp5
{
    class Program
    {
        static void Main(string[] args)
        {
            using (var wb = new WebClient())
            {

                var data = new NameValueCollection();
                data["username"] = "myUser";
                data["password"] = "myPassword";
                wb.Headers["Bearer"] = "api_key111";
                var response = wb.UploadData("https://www.site.com", "POST", Encoding.Default.GetBytes("{\"Data\": \"Test\"}"));
                string responseInString = Encoding.UTF8.GetString(response);
            }

        }
    }
}
  • Вопрос задан
  • 773 просмотра
Пригласить эксперта
Ответы на вопрос 2
@andoral
Так data никуда не записывается же
Ответ написан
@basrach
1. Сначала вам нужно разобраться какой тип авторизация используется: Basic Auth, Bearer Token, NTLM и т.д.
2. Начинать писать код:

using System.Net.Http;

Выполнение запроса без авторизации:
var client = new HttpClient();
client.DefaultRequestHeaders.Add("MyHeader", "MyHeaderValue");
var response = client.PostAsync("https://toster.ru", new StringContent("{\"Data\": \"Test\"}")).Result;
	
Console.WriteLine(response.Content.ReadAsStringAsync().Result);


Basic авторизация:
var username = "username";
var password = "password";
	
var authValue = Convert.ToBase64String(Encoding.ASCII.GetBytes($"{username}:{password}"));
	
var client = new HttpClient();	
client.DefaultRequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Basic", authValue);
client.DefaultRequestHeaders.Add("MyHeader", "MyHeaderValue");
var response = client.PostAsync("https://toster.ru", new StringContent("{\"Data\": \"Test\"}")).Result;
	
Console.WriteLine(response.Content.ReadAsStringAsync().Result);


Bearer token:
var token = "token"; // вам нужно где-то получить токен
 	
var client = new HttpClient();	
client.DefaultRequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Bearer", token);
client.DefaultRequestHeaders.Add("MyHeader", "MyHeaderValue");
var response = client.PostAsync("https://toster.ru", new StringContent("{\"Data\": \"Test\"}")).Result;
	
Console.WriteLine(response.Content.ReadAsStringAsync().Result);


Если нужно для NTLM, могу скинуть пример, но навряд ли у вас этот случай.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы