C#基于socket模拟http请求的方法_C#教程-查字典教程网
C#基于socket模拟http请求的方法
C#基于socket模拟http请求的方法
发布时间:2016-12-28 来源:查字典编辑
摘要:本文实例讲述了C#基于socket模拟http请求的方法。分享给大家供大家参考。具体实现方法如下:usingSystem;usingSyst...

本文实例讲述了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 + ":rn"; //接受返回的内容. 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("rn"); //这个一定要有不然接收回来可能没有数据 return sb.ToString(); } static void Main(string[] args) { string getStrs=HeadlerInit(); string getHtml = HttpHelper.SocketSendReceive(getStrs, "www.baidu.com", 80); Console.WriteLine(getHtml); } }

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

相关阅读
推荐文章
猜你喜欢
附近的人在看
推荐阅读
拓展阅读
  • 大家都在看
  • 小编推荐
  • 猜你喜欢
  • 最新C#教程学习
    热门C#教程学习
    编程开发子分类