Подключите HTTP-метод через C # - PullRequest
2 голосов
/ 01 ноября 2011

Доброе утро, я программист на C #, у меня проблема

Я попытался открыть сокет для получения HTTP-соединения и прочитать страницу как поток байтов, и все было правильно, например, чтобы получитьНа главной странице Google через сокет C # я выполнил следующие шаги:

1.Открываем поток и подключаемся к серверу Google:

Socket skt = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
skt.Connect("www.google.com", 80);

2. готовим запрос и ставимэто в байтовом массиве:

string hdrs = "GET / HTTP/1.1\r\n"
    + "Host: www.google.com\r\n\r\n";
byte[] req_as_bytes = Encoding.UTF8.GetBytes(hdrs);

3. Отправка HTTP-запроса:

skt.Send(req_as_bytes);

4. Получение ответа:

byte[] data = new byte[1024 * 200]; // 200 kilo bytes
int t = skt.Receive(data);
Console.WriteLine(Encoding.UTF8.GetString(data,0,t));

но когда я изменил httpметод от [GET] до [CONNECT], респон будет пустым!или с сервера не поступило никаких данных, новый запрос был:

string hdrs = "CONNECT www.google.com:443 HTTP/1.1\r\n"
    + "Host: www.google.com:443\r\n"
    + "Proxy-Connection: keep-alive\r\n\r\n";

Может ли кто-нибудь мне помочь?

полный код:

static void Main(string[] args)
{
    Socket skt = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
    skt.Connect("www.google.com", 443);
    string hdrs = "CONNECT www.google.com:443 HTTP/1.1\r\n"
        + "Host: www.google.com:443\r\n"
        + "Proxy-Connection: keep-alive\r\n\r\n";
    byte[] req_as_bytes = Encoding.UTF8.GetBytes(hdrs);
    skt.Send(req_as_bytes);
    byte[] data = new byte[1024 * 200]; // 200 kilo bytes
    int t = skt.Receive(data);
    Trace.WriteLine(Encoding.UTF8.GetString(data, 0, t);
    skt.Shutdown(SocketShutdown.Both);
    skt.Close();
}

спасибо... Мхамад

Ответы [ 2 ]

2 голосов
/ 01 ноября 2011

Если вы действительно хотите внедрить сервер HTTPS, вам нужно прочитать RFC .

Кстати, это уже реализовано в .NET: System.Net.HttpListener

0 голосов
/ 03 февраля 2015
socket.Connect("www.google.com", **80**);

string hdrs = "CONNECT www.google.com:**443** HTTP/1.1\r\n"
    + "Host: www.google.com:443\r\n"
    + "Proxy-Connection: keep-alive\r\n\r\n";

80 - конфликт 443!

если вы используете порт 443?Должно быть, используется .NET 4.0 FRAMEWORK - класс SSLSTREAM ..

...