Страницы

Поиск по вопросам

пятница, 12 июля 2019 г.

Как на c# отправить GET или POST запрос, используя из параметров только url и raw(тело запроса)?

Если отправлять запросы через 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
Но заголовки ответа придется парсить самому.

Комментариев нет:

Отправить комментарий