C#.NET 网络操作类
using System;
using System.Web;
using System.Text;
using System.IO;
using System.Net;
using System.Runtime.InteropServices;
using System.Web.UI;
namespace Pub.Class
{
/// <summary>
/// 网络操作类
/// </summary>
public class Net
{
private static object lockHelper = new object();
#region DownFile/ResponseFile/GetHttpFile
/// <summary>
/// 下载文件
/// </summary>
/// <param name="fileFile">文件路径(绝对路径)</param>
/// <returns >返回文件是否存在,存在下载成功</returns>
public static bool DownFile(string fileFile)
{
if (System.IO.File.Exists(fileFile)) {
FileInfo _DownloadFile = new FileInfo(fileFile);
HttpContext.Current.Response.Clear();
HttpContext.Current.Response.ClearHeaders();
HttpContext.Current.Response.Buffer = false;
HttpContext.Current.Response.ContentType = "application/octet-stream";
HttpContext.Current.Response.AppendHeader("Content-Disposition", "attachment;filename=" + HttpUtility.UrlEncode(_DownloadFile.FullName, System.Text.Encoding.UTF8));
HttpContext.Current.Response.AppendHeader("Content-Length", _DownloadFile.Length.ToString());
HttpContext.Current.Response.WriteFile(_DownloadFile.FullName);
HttpContext.Current.Response.Flush();
HttpContext.Current.Response.End();
return true;
}
return false;
}
public static string DownFile(string url,string fileName) {
WebClient wc = new WebClient();
try {
wc.DownloadFile(url,fileName);
} catch {
fileName = "";
} finally {
wc.Dispose();
}
return fileName;
}
/// <summary>
/// 以指定的ContentType输出指定文件文件
/// </summary>
/// <param name="filepath">文件路径</param>
/// <param name="filename">输出的文件名</param>
/// <param name="filetype">将文件输出时设置的ContentType</param>
public static void ResponseFile(string filepath, string filename, string filetype)
{
Stream iStream = null;
// 缓冲区为10k
byte[] buffer = new Byte[10000];
// 文件长度
int length;
// 需要读的数据长度
long dataToRead;
try {
// 打开文件
iStream = new FileStream(filepath, FileMode.Open, FileAccess.Read,FileShare.Read);
// 需要读的数据长度
dataToRead = iStream.Length;
HttpContext.Current.Response.ContentType = filetype;
HttpContext.Current.Response.AddHeader("Content-Disposition", "attachment;filename=" + filename.Trim().UrlEncode().Replace("+", " "));
while (dataToRead > 0) {
// 检查客户端是否还处于连接状态
if (HttpContext.Current.Response.IsClientConnected) {
length = iStream.Read(buffer, 0, 10000);
HttpContext.Current.Response.OutputStream.Write(buffer, 0, length);
HttpContext.Current.Response.Flush();
buffer = new Byte[10000];
dataToRead = dataToRead - length;
} else {
// 如果不再连接则跳出死循环
dataToRead = -1;
}
}
} catch (Exception ex) {
HttpContext.Current.Response.Write("Error : " + ex.Message);
} finally {
if (iStream != null) iStream.Close();// 关闭文件
}
HttpContext.Current.Response.End();
}
/// <summary>
/// 下载远程的文件
/// </summary>
/// <param name="sUrl">URL</param>
/// <param name="sSavePath">保存到</param>
/// <returns>成功否</returns>
/// <example>
/// <code>
/// TimeSpan oStartTime=DateTime.Now.TimeOfDay;
/// Response.Write(GetHttpFile("http://www.spbdev.com/download/DotNetInfo1.0.rar",Request.MapPath("RecievedFile.rar")));
/// Response.Write("<br><br>\r\n执行时间:" + DateTime.Now.TimeOfDay.Subtract(oStartTime).TotalMilliseconds.ToString() + " 毫秒");
/// </code>
/// </example>
public bool GetHttpFile(string sUrl,string sSavePath) {
string sException=null;
bool bRslt=false;
WebResponse oWebRps=null;
WebRequest oWebRqst=WebRequest.Create(sUrl);
oWebRqst.Timeout=50000;
try{
oWebRps=oWebRqst.GetResponse();
} catch(WebException e){
sException=e.Message.ToString();
} catch(Exception e){
sException=e.ToString();
} finally {
if(oWebRps!=null){
BinaryReader oBnyRd=new BinaryReader(oWebRps.GetResponseStream(),System.Text.Encoding.GetEncoding("GB2312"));
int iLen=Convert.ToInt32(oWebRps.ContentLength);
FileStream oFileStream;
try{
if(File.Exists( HttpContext.Current.Request.MapPath("RecievedData.tmp")))
oFileStream=File.OpenWrite(sSavePath);
else
oFileStream=File.Create(sSavePath);
oFileStream.SetLength((Int64)iLen);
oFileStream.Write(oBnyRd.ReadBytes(iLen),0,iLen);
oFileStream.Close();
} finally {
oBnyRd.Close();
oWebRps.Close();
}
bRslt=true;
}
}
return bRslt;
}
#endregion
#region GetRemoteHtmlCode/GetRemoteHtmlCode2/GetRemoteHtmlCode3
/// <summary>
/// 获取远程文件源代码 GetRemoteHtmlCode(@"http://www.baidu.com");
/// </summary>
/// <param name="Url">远程url</param>
/// <returns></returns>
public static string GetRemoteHtmlCode2(string Url) {
return GetRemoteHtmlCode2(Url, Encoding.Default);
}
/// <summary>
/// 获取远程文件源代码
/// </summary>
/// <param name="Url"></param>
/// <param name="encoding"></param>
/// <returns></returns>
public static string GetRemoteHtmlCode2(string Url, System.Text.Encoding encoding) {
lock (lockHelper) {
Url += (Url.IndexOf("?") >= 0 ? "&time=" : "?time=") + Rand.RndDateStr();
string s = ""; HttpWebResponse response = null; StreamReader stream = null;
try {
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(Url);
response = (HttpWebResponse) request.GetResponse();
stream = new StreamReader(response.GetResponseStream(),encoding);
s = stream.ReadToEnd();
} catch {} finally {
if (stream != null) stream.Close();
if (response != null) response.Close();
}
return s;
}
}
/// <summary>
/// 获取远程文件源代码 GetRemoteHtmlCode(@"http://www.baidu.com");
/// </summary>
/// <param name="strUrl">远程url</param>
/// <returns></returns>
public static string GetRemoteHtmlCode3(string strUrl) {
return GetRemoteHtmlCode3(strUrl, Encoding.Default);
}
/// <summary>
/// 获取远程文件源代码
/// </summary>
/// <param name="strUrl"></param>
/// <param name="encoding"></param>
/// <returns></returns>
public static string GetRemoteHtmlCode3(string strUrl, System.Text.Encoding encoding)
{
lock (lockHelper) {
strUrl += (strUrl.IndexOf("?") >= 0 ? "&time=" : "?time=") + Rand.RndDateStr();
StringBuilder Html = new StringBuilder();
HttpWebResponse myRp = null; StreamReader sr = null; Stream mystr = null;
try {
HttpWebRequest myRq = (HttpWebRequest)HttpWebRequest.Create(strUrl);
myRq.AllowAutoRedirect = true;
myRq.Timeout = 1000*60*3;
myRq.UserAgent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; .NET CLR 1.1.4322; .NET CLR 2.0.50727)";
myRq.Referer=strUrl;
myRp = (HttpWebResponse)myRq.GetResponse();
mystr = myRp.GetResponseStream();
sr = new StreamReader(mystr,encoding);
while(sr.Peek()!=-1) { Html.Append(sr.ReadToEnd()); }
} catch {
return "-1";
} finally {
if (sr!=null) sr.Close();
if (mystr!=null) mystr.Close();
if (myRp!=null) myRp.Close();
}
return Html.ToString();
}
}
/// <summary>
/// 获取远程文件源代码 GetRemoteHtmlCode(@"http://www.baidu.com");
/// </summary>
/// <param name="strUrl">远程url</param>
/// <returns></returns>
public static string GetRemoteHtmlCode4(string strUrl) {
return GetRemoteHtmlCode4(strUrl, Encoding.Default);
}
/// <summary>
/// 获取远程文件源代码
/// </summary>
/// <param name="Url"></param>
/// <param name="encoding"></param>
/// <returns></returns>
public static string GetRemoteHtmlCode4(string Url, System.Text.Encoding encoding)
{
lock (lockHelper) {
Url += (Url.IndexOf("?") >= 0 ? "&time=" : "?time=") + Rand.RndDateStr();
WebClient wc = new WebClient();
wc.Credentials = CredentialCache.DefaultCredentials;
Byte[] pageData = wc.DownloadData(Url);
string content = encoding.GetString(pageData);
wc.Dispose();
return content;
}
}
/// <summary>
/// 获取远程文件源代码 GetRemoteHtmlCode(@"http://www.baidu.com");
/// </summary>
/// <param name="strUrl">远程url</param>
/// <returns></returns>
public static string GetRemoteHtmlCode5(string strUrl) {
return GetRemoteHtmlCode5(strUrl, Encoding.Default);
}
/// <summary>
/// 获取远程文件源代码
/// </summary>
/// <param name="Url"></param>
/// <param name="encoding"></param>
/// <returns></returns>
public static string GetRemoteHtmlCode5(string Url, System.Text.Encoding encoding)
{
lock (lockHelper) {
Url += (Url.IndexOf("?") >= 0 ? "&time=" : "?time=") + Rand.RndDateStr();
string postString = "";
WebClient webClient = new WebClient();
webClient.Headers.Add("Content-Type", "application/x-www-form-urlencoded");
byte[] postData = Encoding.ASCII.GetBytes(postString);
byte[] responseData = webClient.UploadData(Url, "POST", postData);
string srcString = encoding.GetString(responseData);
webClient.Dispose();
return srcString;
}
}
#endregion
#region TransHtml
/// <summary>
/// 转换为静态html
/// </summary>
public static void TransHtml(string path, string outpath,System.Text.Encoding encoding) {
lock (lockHelper) {
FileStream stream = null;
StringWriter writer = new StringWriter();
try {
Page page = new Page();
page.Server.Execute(path, writer);
if (File.Exists(outpath)) {
File.Delete(outpath);
stream = File.Create(outpath);
} else {
stream = File.Create(outpath);
}
byte[] bytes = encoding.GetBytes(writer.ToString());
stream.Write(bytes, 0, bytes.Length);
} catch {} finally{
if (writer != null) { writer.Close(); writer.Dispose(); }
if (stream != null) { stream.Close(); stream.Dispose(); }
}
}
}
#endregion
}
}
开源:
https://github.com/hcxiong 欢迎收藏:)