You can use lower-level classes and send whatever you want:
var client = new TcpClient("host", 80); var stream = client.GetStream();
If TLS connection:
var client = new TcpClient("host", 443); var stream = new SslStream(client.GetStream());
And then we send something:
string request = "GET /folder/1.html HTTP/1.0" + Environment.NewLine + "Host: " + "host" + Environment.NewLine + "Your-header: " + "value" + Environment.NewLine + Environment.NewLine; // или вы можете взять raw байты заголовка откуда-то еще // если есть имя ресурса и raw заголовки, нужно будет склеить байты первой строки с "GET/POST" и байты заголовоков // (не забыв что в конце должен быть перенос строки 2 раза) byte[] requestBytes = Encoding.ASCII.GetBytes(request); stream.Write(requestBytes, 0, requestBytes.Length);
And we read the answer:
var reader = new StreamReader(stream, Encoding.UTF8); // подставьте сюда нужную кодировку var response = sr.ReadToEnd(); // здесь будут и заголовки и тело // закрываем стрим и TcpClient
But the response headers will have to be parsed by yourself.