C#中使用Socket获取网页源代码的代码_C#教程-查字典教程网
C#中使用Socket获取网页源代码的代码
C#中使用Socket获取网页源代码的代码
发布时间:2016-12-28 来源:查字典编辑
摘要: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#教程学习
    热门C#教程学习
    编程开发子分类