C#基于socket模擬http請求的方法
更新時間:2015年06月29日 15:43:59 作者:陳傳文
這篇文章主要介紹了C#基于socket模擬http請求的方法,實例分析了socket模擬http請求的實現(xiàn)技巧,需要的朋友可以參考下
本文實例講述了C#基于socket模擬http請求的方法。分享給大家供大家參考。具體實現(xiàn)方法如下:
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協(xié)議一般是80 public static string SocketSendReceive(string request, string server, int port) { try { Byte[] bytesSent = Encoding.ASCII.GetBytes(request); Byte[] bytesReceived = new Byte[655350]; // 創(chuàng)建連接 Socket s = ConnectSocket(server, port); if (s == null) return ("Connection failed"); // 發(fā)送內容. 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"); //這個一定要有不然接收回來可能沒有數(shù)據(jù) 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#實現(xiàn)讀寫文本文件中的數(shù)據(jù)
這篇文章重點給大家介紹C#實現(xiàn)讀寫文本文件中的數(shù)據(jù)的一些知識,讀取.txt文件數(shù)據(jù)的實例代碼及寫入讀取過程完整代碼,感興趣的朋友跟隨小編一起看看吧2021-06-06c# 使用谷歌身份驗證GoogleAuthenticator的示例
這篇文章主要介紹了c# 使用谷歌身份驗證GoogleAuthenticator的示例,幫助大家更好的理解和使用c#,感興趣的朋友可以了解下2021-01-01C#將隱私信息(銀行賬戶,身份證號碼)中間部分特殊字符替換成*
大家在銀行交易某些業(yè)務時,都可以看到無論是身份證、銀行賬號中間部分都是用*號替換的,下面這篇文章主要介紹C#將隱私信息(銀行賬戶,身份證號碼)中間部分特殊字符替換成*的相關資料,需要的朋友可以參考下2015-08-08Unity Shader實現(xiàn)動態(tài)霧效果
這篇文章主要為大家詳細介紹了Unity Shader實現(xiàn)動態(tài)霧效果,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2020-04-04