Quick Http Request with Socket and C#
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.Runtime.InteropServices; 6 using System.IO; 7 using System.Diagnostics; 8 using System.Net; 9 using System.Net.Sockets; 10 11 namespace ConsoleApplication1 12 { 13 class Program 14 { 15 static void Main(string[] args) 16 { 17 var host = "www.wikipedia.org"; 18 var resource = "/"; 19 var result = GetResource(host, resource); 20 File.WriteAllText("temp.txt",result); 21 Process.Start("temp.txt"); 22 } 23 24 private static string GetResource(string host, string resource) 25 { 26 var hostEntry = Dns.GetHostEntry(host); 27 var socket = CreateSocket(hostEntry); 28 SendRequest(socket, host, resource); 29 return GetResponse(socket); 30 } 31 32 private static Socket CreateSocket(IPHostEntry hostEntry) 33 { 34 const int httpPort = 80; 35 foreach (var address in hostEntry.AddressList) 36 { 37 var endPoint = new IPEndPoint(address, httpPort); 38 var socket = new Socket( 39 endPoint.AddressFamily, 40 SocketType.Stream, 41 ProtocolType.Tcp); 42 socket.Connect(endPoint); 43 if (socket.Connected) 44 { 45 return socket; 46 } 47 } 48 return null; 49 } 50 51 private static void SendRequest(Socket socket, string host, string resource) 52 { 53 var requestMessage = String.Format( 54 "GET {0} HTTP/1.1\r\n" + 55 "HOST: {1} \r\n" + 56 "\r\n", 57 resource,host 58 ); 59 var requestBytes = Encoding.ASCII.GetBytes(requestMessage); 60 socket.Send(requestBytes); 61 } 62 63 private static string GetResponse(Socket socket) 64 { 65 int bytes = 0; 66 byte[] buffer = new byte[256]; 67 var result = new StringBuilder(); 68 69 do 70 { 71 bytes = socket.Receive(buffer); 72 result.Append(Encoding.ASCII.GetString(buffer,0,bytes)); 73 } while (bytes > 0); 74 75 return result.ToString(); 76 } 77 } 78 }