手机
当前位置:查字典教程网 >编程开发 >C#教程 >C#中使用Socket获取网页源代码的代码
C#中使用Socket获取网页源代码的代码
摘要:WebToolkit类:复制代码代码如下:usingSystem;usingSystem.Net.Sockets;usingSystem.T...

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.1rnHost:{2}:{3}rnConnection:Closernrn", 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.1rnHost:{1}:{2}rnContent-Length:{3}rnContent-Type:application/x-www-form-urlencodedrnConnection:Closernrn{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.jb51.net/t.asp?keyword=vbscript", Encoding.Default));

Console.ReadKey();

}

}

}

【C#中使用Socket获取网页源代码的代码】相关文章:

C#中实现网段扫描的代码

C#线程池用法详细介绍

C#中怎么将一个List转换为只读的

C#访问应用程序配置文件的方法

C#使用itextsharp生成PDF文件的实现代码

C#中fixed关键字的作用总结

C# 读取指定路径配置文件的方法

C#中读写INI文件的方法例子

C#从实体对象集合中导出Excel的代码

C#中常使用进度条的代码

精品推荐
分类导航