你的位置:首页 > ASP.net教程

[ASP.net教程]用socket 模拟http请求


using System;using System.Collections.Generic;using System.Linq;using System.Net;using System.Net.Sockets;using System.Text;using System.Threading.Tasks;  class HttpHelper  {    #region 模拟客户端socket连接    private static Socket ConnectSocket(string server, int port)    {      Socket s = null;      IPHostEntry hostEntry = null;      // Get host related information.      hostEntry = Dns.GetHostEntry(server);      // Loop through the AddressList to obtain the supported AddressFamily. This is to avoid      // an exception that occurs when the host IP Address is not compatible with the address family      // (typical in the IPv6 case).      foreach (IPAddress address in hostEntry.AddressList)      {        IPEndPoint ipe = new IPEndPoint(address, port);        Socket tempSocket =        new Socket(ipe.AddressFamily, SocketType.Stream, ProtocolType.Tcp);        tempSocket.Connect(ipe);        if (tempSocket.Connected)        {          s = tempSocket;          break;        }        else        {          continue;        }      }      return s;    }    #endregion    #region 请求的主方法 request 是http请求的头部,可以用抓包工具获取,server可以使域名或者是ip地址,port http协议一般是80    public static string SocketSendReceive(string request, string server, int port)    {      try      {        Byte[] bytesSent = Encoding.ASCII.GetBytes(request);        Byte[] bytesReceived = new Byte[655350];        // 创建连接        Socket s = ConnectSocket(server, port);        if (s == null)          return ("Connection failed");        // 发送内容.        s.Send(bytesSent, bytesSent.Length, 0);        // Receive the server home page content.        int bytes = 0;        string page = "Default HTML page on " + server + ":\r\n";        //接受返回的内容.        do        {          bytes = s.Receive(bytesReceived, bytesReceived.Length, 0);          page = page + Encoding.UTF8.GetString(bytesReceived, 0, bytes);        }        while (bytes > 0);        return page;      }      catch      {        return string.Empty;      }    }    #endregion  }

  

using System;using System.Collections.Generic;using System.IO;using System.Linq;using System.Text;using System.Threading.Tasks;using System.Reflection;  class Program  {    public static string HeadlerInit() {      StringBuilder sb = new StringBuilder();      sb.AppendLine("GET http://www.baidu.com/ HTTP/1.1");      sb.AppendLine("Host: www.baidu.com");      sb.AppendLine("Connection: keep-alive");      sb.AppendLine("Accept: text/html,application/xhtml+