Создайте http-запрос с помощью TcpClient
Я создал пустое веб-приложение asp.net, где у меня есть простая страница aspx:
protected void Page_Load(object sender, EventArgs e)
{
Response.Write("Hello world");
}
когда я пойдуhttp://localhost:2006/1.aspx
Я вижу страницу с надписью "Привет, мир".
Хорошо, так на c #, если я делаю:
WebClient webClient = new WebClient() { Proxy = null };
var response2 = webClient.DownloadString("http://localhost:2006/1.aspx");
тогда response2 == "Привет, мир"
Мне нужно добиться того же самого с помощью необработанного соединения TCPЯ пытаюсь добиться того же с помощью TCP-соединения, и по какой-то причине это не работает:
byte[] buf = new byte[1024];
string header = "GET http://localhost:2006/1.aspx HTTP/1.1\r\n" +
"Host: localhost:2006\r\n" +
"Connection: keep-alive\r\n" +
"User-Agent: Mozilla/5.0\r\n" +
"\r\n";
var client = new TcpClient("localhost", 2006);
// send request
client.Client.Send(System.Text.Encoding.ASCII.GetBytes(header));
// get response
var i = client.Client.Receive(buf);
var response1 = System.Text.Encoding.UTF8.GetString(buf, 0, i);
здесь response1! = "Привет, Волд ".(обратите внимание, я использую! = значение НЕ равно)
В этом примере я получаю ошибку неверного запроса.
Я хочу использовать TCP-соединение в учебных целях. Я не понимаю, почему второй пример не работает. Моя первая реакция была, может быть, заголовки неверны, поэтому я запустил wireshark, чтобы увидеть заголовки, отправленные моим браузером chrom. На самом деле фактический запрос, отправленный моим браузером, когда я идуhttp://localhost:2006/1.aspx
является:
GET http://localhost:2006/1.aspx HTTP/1.1
Host: localhost:2006
Connection: keep-alive
Cache-Control: max-age=0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/30.0.1599.101 Safari/537.36
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-US,en;q=0.8
Я также пытался использовать этот запрос, и когда я это делаю, я также получал ответ на Bad Request! Зачем?
Другими словами я заменил
string header = "GET http://localhost:2006/1.aspx HTTP/1.1\r\n" +
"Host: localhost:2006\r\n" +
"Connection: keep-alive\r\n" +
"User-Agent: Mozilla/5.0\r\n" +
"\r\n";
ЗА
string header = "GET http://localhost:2006/1.aspx HTTP/1.1\r\n" +
"Host: localhost:2006\r\n" +
"Connection: keep-alive\r\n" +
"Cache-Control: max-age=0\r\n" +
"Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8\r\n" +
"User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/30.0.1599.101 Safari/537.36\r\n" +
"Accept-Encoding: gzip,deflate,sdch\r\n" +
"Accept-Language: en-US,en;q=0.8" +
"\r\n\r\n";
и все равно не работает.