Если отправлять запросы через HttpWebRequest - нужно отдельно вводить нужные параметры "Host", "KeepAlive", "UserAgent"..... таких заголовком может быть >15.
И при выполнении HttpWebRequest все эти заголовки(параметры) идут не всегда в нужной последовательности, а часть может вообще пропускаться.
Можно ли отправить GET или POST запрос, указав вместо всех этих всех параметров(заголовков) именно сам RAW запроса? С нужным мне порядком заголовком. И именно таким, каким я его хочу видеть.
Ответ
Вы можете использовать более низкоуровневые классы и посылать все, что хотите:
var client = new TcpClient("host", 80);
var stream = client.GetStream();
Если соединение по TLS:
var client = new TcpClient("host", 443);
var stream = new SslStream(client.GetStream());
И дальше отправляем что-то:
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);
И читаем ответ:
var reader = new StreamReader(stream, Encoding.UTF8); // подставьте сюда нужную кодировку
var response = sr.ReadToEnd(); // здесь будут и заголовки и тело
// закрываем стрим и TcpClient
Но заголовки ответа придется парсить самому.
Комментариев нет:
Отправить комментарий