• C#使用Socket获取网页源代码


    WebToolkit类:

    using System;
    using System.Net.Sockets;
    using System.Text;
    
    namespace ConsoleApplication1
    {
        class WebToolkit
        {
            /// <summary>
            /// Url结构
            /// </summary>
            struct UrlInfo
            {
                public string Host;
                public int Port;
                public string File;
                public string Body;
            }
    
            /// <summary>
            /// 解析URL
            /// </summary>
            /// <param name="url"></param>
            /// <returns></returns>
            private static UrlInfo ParseURL(string url)
            {
                UrlInfo urlInfo = new UrlInfo();
                string[] strTemp = null;
                urlInfo.Host = "";
                urlInfo.Port = 80;
                urlInfo.File = "/";
                urlInfo.Body = "";
                int intIndex = url.ToLower().IndexOf("http://");
                if (intIndex != -1)
                {
                    url = url.Substring(7);
                    intIndex = url.IndexOf("/");
                    if (intIndex == -1)
                    {
                        urlInfo.Host = url;
                    }
                    else
                    {
                        urlInfo.Host = url.Substring(0, intIndex);
                        url = url.Substring(intIndex);
                        intIndex = urlInfo.Host.IndexOf(":");
                        if (intIndex != -1)
                        {
                            strTemp = urlInfo.Host.Split(':');
                            urlInfo.Host = strTemp[0];
                            int.TryParse(strTemp[1], out urlInfo.Port);
                        }
                        intIndex = url.IndexOf("?");
                        if (intIndex == -1)
                        {
                            urlInfo.File = url;
                        }
                        else
                        {
                            strTemp = url.Split('?');
                            urlInfo.File = strTemp[0];
                            urlInfo.Body = strTemp[1];
                        }
                    }
                }
                return urlInfo;
            }
    
            /// <summary>
            /// 发出请求并获取响应
            /// </summary>
            /// <param name="host"></param>
            /// <param name="port"></param>
            /// <param name="body"></param>
            /// <param name="encode"></param>
            /// <returns></returns>
            private static string GetResponse(string host, int port, string body, Encoding encode)
            {
                string strResult = string.Empty;
                byte[] bteSend = Encoding.ASCII.GetBytes(body);
                byte[] bteReceive = new byte[1024];
                int intLen = 0;
    
                using (Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp))
                {
                    try
                    {
                        socket.Connect(host, port);
                        if (socket.Connected)
                        {
                            socket.Send(bteSend, bteSend.Length, 0);
                            while ((intLen = socket.Receive(bteReceive, bteReceive.Length, 0)) > 0)
                            {
                                strResult += encode.GetString(bteReceive, 0, intLen);
                            }
                        }
                        socket.Close();
                    }
                    catch { }
                }
    
                return strResult;
            }
    
            /// <summary>
            /// GET请求
            /// </summary>
            /// <param name="url"></param>
            /// <param name="encode"></param>
            /// <returns></returns>
            public static string Get(string url, Encoding encode)
            {
                UrlInfo urlInfo = ParseURL(url);
                string strRequest = string.Format("GET {0}?{1} HTTP/1.1\r\nHost:{2}:{3}\r\nConnection:Close\r\n\r\n", urlInfo.File, urlInfo.Body, urlInfo.Host, urlInfo.Port.ToString());
                return GetResponse(urlInfo.Host, urlInfo.Port, strRequest, encode);
            }
    
            /// <summary>
            /// POST请求
            /// </summary>
            /// <param name="url"></param>
            /// <param name="encode"></param>
            /// <returns></returns>
            public static string Post(string url, Encoding encode)
            {
                UrlInfo urlInfo = ParseURL(url);
                string strRequest = string.Format("POST {0} HTTP/1.1\r\nHost:{1}:{2}\r\nContent-Length:{3}\r\nContent-Type:application/x-www-form-urlencoded\r\nConnection:Close\r\n\r\n{4}", urlInfo.File, urlInfo.Host, urlInfo.Port.ToString(), urlInfo.Body.Length, urlInfo.Body);
                return GetResponse(urlInfo.Host, urlInfo.Port, strRequest, encode);
            }
        }
    }

    调用示例:

    using System;
    using System.Text;
    
    namespace ConsoleApplication1
    {
        //调用示例
        class Program
        {
            public static void Main(string[] args)
            {
                Console.WriteLine(WebToolkit.Get("http://www.mzwu.com/t.asp?keyword=mzwu.com", Encoding.Default));
                Console.ReadKey();
            }
        }
    }
  • 相关阅读:
    请朋友做事,须以名誉为限,为朋友做事,亦须以名誉为限
    这世上总有一些人记得你,关注着你,牵挂着你
    杏花春雨已不再,牧童遥指已不再,剑门细雨渭城轻尘也都已不再
    如果要你做鲁滨逊,你会选第三型还是第二型的朋友做“礼拜五”呢
    人类最不能伤害的就是自尊
    单靠理论和教训是无济于事的
    交真朋友已是件比较奢侈的事儿
    他一定是一个懂生活、懂人生,爱自己、爱别人的人
    国子监,就是从前的大学
    只有把理想和现实有机结合起来,才有可能成为一个成功之人
  • 原文地址:https://www.cnblogs.com/chengulv/p/2875616.html
Copyright © 2020-2023  润新知