2012-06-08 7 views
2

Прошу прощения, если это немного тусклым, но я хочу, чтобы отправить что-то вроде этого в течение sslstream к серверу, который я приобрел безопасное соединение через сокет к ...Construct GET Запрос SslStream

GET /F5Check/qpi/1 HTTP/1.1 
Host: *****.com 
Connection: keep-alive 
Cache-Control: max-age=0 
User-Agent: Mozilla/5.0 (Windows NT 5.1) AppleWebKit/536.5 (KHTML, like Gecko) Chrome/19.0.1084.52 Safari/536.5 
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 
Accept-Encoding: gzip,deflate,sdch 
Accept-Language: en-US,en;q=0.8 
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3 

I пытались использовать строковый построитель

var sb = new StringBuilder(); 
sb.AppendLine("GET /F5Check/qpi/1 HTTP/1.1"); 
sb.AppendLine(string.Format("Host: {0}", host)); 
sb.AppendLine("Connection: keep-alive"); 
sb.AppendLine("User-Agent: Mozilla/5.0 (Windows NT 5.1) AppleWebKit/536.5 (KHTML, like Gecko) Chrome/19.0.1084.52 Safari/536.5"); 
sb.AppendLine("Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"); 
sb.AppendLine("Accept-Encoding: gzip,deflate,sdch"); 
sb.AppendLine("Accept-Language: en-US,en;q=0.8"); 
sb.AppendLine("Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3"); 

, а затем делать это

//Translate the data. 
byte[] sendBuffer = UTF8Encoding.UTF8.GetBytes(sb.ToString()); 

//Send the data. 
requestStream.Write(sendBuffer); 

где С.Б. является строка строительный объект!

Я просто не получаю никакого ответа от сервера, когда пытаюсь читать из потока, поэтому сервер не может понять смысл моего запроса на обманщик!

Я знаю, что я мог бы использовать вариации WebRequest сделать то же самое, но есть конкретная причина, почему я пытаюсь это сделать ...

В принципе мне нужно знать, что для кодирования для передачи, так что я может вызвать запрос на получение?

+1

Что случилось с HttpWebRequest? (кроме того, вы можете использовать WebClient или HttpClient) – dtb

+0

Реализация HTTP - это не кусок торта. Вам необходимо прочитать спецификацию для отправки правильных битов и кусков. Взгляните сюда: http://tools.ietf.org/html/draft-ietf-httpbis-p1-messaging http://tools.ietf.org/html/draft-ietf-httpbis-p2-semantics http://tools.ietf.org/html/draft-ietf-httpbis-p3-payload – dtb

+0

Я знаю, что это не кусок пирога ... Если это было; Я бы не стал спрашивать об этом здесь ;-) –

ответ

3

Выстрел в темноте:

Попробуйте установить заголовок запрос в Connection "закрыть".

+0

Я посмотрю –

+0

Woohooo - это сделало это –

+0

Ну, это была удача. – Totero

2

Одна вещь, которую вам кажется недостающей, это пустая строка в конце запроса. HTTP specification требует пустую строку для разделения полей заголовка из тела сообщения или для обозначения конца запроса GET.

Как известно, сервер не знает, что ваш запрос завершен, поэтому он будет ждать следующей строки. Добавление дополнительного sb.AppendLine() должно исправить это.

+0

Спасибо. Я попробую это .. –

2

Вторым нужен дополнительный разрыв строки в соответствии со стандартами HTTP. Просто расширяя то, что у Тима, вот какой-то исходный код. Я пошел вперед и использовал класс SslStream для подключения, я предполагаю, что это то, что вы сделали. Я тестировал это на сайте HTTPS Google и получил ответ. Надеюсь, этого достаточно, чтобы вернуть вас в нужное русло.

ПРИМЕЧАНИЕ: Я изменил строку UA, потому что наш прокси-сервер почему-то здесь ненавидел этот. Я не считаю, что это ваша проблема, но для меня это было проблемой.

static void Main(string[] args) 
    { 

     string host = "encrypted.google.com"; 

     // Connect socket 
     TcpClient client = new TcpClient(host,443); 
     NetworkStream stream = client.GetStream(); 

     // Wrap in SSL stream 
     SslStream sslStream = new SslStream(stream); 
     sslStream.AuthenticateAsClient(host); 

     //Build request 
     var sb = new StringBuilder(); 

     sb.AppendLine("GET/HTTP/1.1"); 
     sb.AppendLine(string.Format("Host: {0}", host)); 
     sb.AppendLine("Connection: keep-alive"); 
     sb.AppendLine("User-Agent: CSharp"); 
     sb.AppendLine("Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"); 
     sb.AppendLine("Accept-Encoding: gzip,deflate,sdch"); 
     sb.AppendLine("Accept-Language: en-US,en;q=0.8"); 
     sb.AppendLine("Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3"); 
     sb.AppendLine(); 

     //Go go go! 
     byte[] headerBytes = Encoding.UTF8.GetBytes(sb.ToString()); 
     sslStream.Write(headerBytes, 0, headerBytes.Length); 
     sslStream.Flush(); 


     //Get a place to put it 
     byte[] buffer = new byte[2048]; 
     int bytes; 

     //Answer 
     do 
     { 
      bytes = sslStream.Read(buffer, 0, buffer.Length); 
      Console.Write(Encoding.UTF8.GetString(buffer, 0, bytes)); 
     } while (bytes != 0); 

     //And done 
     client.Close(); 
     Console.ReadKey(); 


    } 
+0

спасибо, но не повезло –

Смежные вопросы