首页 > 编程 > C# > 正文

C#基于socket模拟http请求的方法

2020-01-24 01:40:04
字体:
来源:转载
供稿:网友

本文实例讲述了C#基于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+xml,application/xml;q=0.9,image/webp,*/*;q=0.8");   sb.AppendLine("User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.90 Safari/537.36");   sb.AppendLine("Accept-Encoding:deflate, sdch");   sb.AppendLine("Accept-Language: zh-CN,zh;q=0.8");   sb.AppendLine("/r/n");   //这个一定要有不然接收回来可能没有数据   return sb.ToString();  }  static void Main(string[] args)  {   string getStrs=HeadlerInit();   string getHtml = HttpHelper.SocketSendReceive(getStrs, "www.baidu.com", 80);   Console.WriteLine(getHtml);  }}

希望本文所述对大家的C#程序设计有所帮助。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表