2011-10-17 18 views
3

私はHTTPリクエストを送信しようとしており、C#ソケットを介してサーバからの応答を受信しようとしています。C#ソケット上のHTTP

私は、次のコード(IPが正しく解決さ)書いている:私は間違って何をやっている

IPEndPoint RHost = new IPEndPoint(IP, Port); 
Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); 
socket.Connect(RHost); 

String HTTPRequestHeaders_String = "GET ?q=fdgdfg HTTP/1.0 
Host: google.com 
Keep-Alive: 300 
Connection: Keep-Alive 
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/534.16 (KHTML, like Gecko) Chrome/10.0.648.205 Safari/534.16 
Referer: http://google.com/"; 

MessageBox.Show(HTTPRequestHeaders_String, "Request"); 

byte[] HTTPRequestHeaders = System.Text.Encoding.ASCII.GetBytes(HTTPRequestHeaders_String); 
socket.Send(HTTPRequestHeaders, SocketFlags.None); 

String Response = ""; 
byte[] buffer = new byte[(int) socket.ReceiveBufferSize]; 

int bytes; 
do 
{ 
    // On this lane program stops to react 
    bytes = socket.Receive(buffer); 
    // This line cannot be reached, tested with breakpoint 
    Response += Encoding.ASCII.GetString(buffer, 0, bytes); 
} 
while (bytes >= 0); 

MessageBox.Show(Response, "Response"); 

?私はちょうどページの完全なHTML、または応答から少なくとも少数の文字を読み込む必要があります(私はこのことさえできません)。

+3

は 'HttpWebRequest'クラスを使用します。 – SLaks

+2

@SLaksもう1つ、「WebClient」... –

+1

HTTPのrequstヘッダーを文字列として作成する必要があります。これらのクラスで可能ですか? –

答えて

5

私はあなたがこの生をしたい場合は、プロトコル自体に探してお勧めhttp://www.w3.org/Protocols/HTTP/1.0/spec.html#Request

、要求を終了するためにCRLFを送信しようとするだろう;)

+0

うわー、私はこの問題で5時間ぐらいだったし、リクエストを終了するのを忘れてしまった、ありがとう! :) –

+0

今、あなたの問題は解決されました。あなたは最初からHttpヘッダーを作成する方法を学んだので、抽象度の高いレベルに切り替える時です。前に述べたように、 'HttpWebRequest'または' WebClient'を使います。 –

1
var webClient = new WebClient(); 
webClient.Headers.Add("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; .NET CLR 1.0.3705;)"); 
Stream responseStream = webClient.OpenRead("http://www.google.com"); 
if (responseStream != null) 
{ 
    var responseReader = new StreamReader(responseStream); 
    string response = responseReader.ReadToEnd(); 
    MessageBox.Show(response); 
} 
1

私は、ソケットレベルでのHttpリクエスト/レスポンスのサイクルを理解する上で非常に役立つことがオトガイ筋プロキシが見つかりました:http://www.mentalis.org/soft/projects/proxy/