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 }

 

 

posted on 2013-04-16 11:17  hhenliang  阅读(364)  评论(0编辑  收藏  举报

导航