获取指定网页的远程资源可使用 WebClient、WebRequest、HttpWebRequest 三种方式来实现。当然也可使用webBrowse,webBrowse不做介绍。

  通过 System.Net 名称空间下 WebClient 类下载文件。

        //通过WebClient下载网页的源码
string url = "http://www.example.com";
System.Net.WebClient client = new System.Net.WebClient();
client.Encoding = System.Text.Encoding.UTF8;
string strHtml = client.DownloadString(url);

 综合实例:

using System;
using System.Text; using System.IO;
using System.Net; namespace SnapUtility
{
public class ServerResourceHelper
{
/// <summary>
/// 通过WebClient获取远程资源
/// </summary>
/// <param name="url"></param>
/// <returns></returns>
public static string GetByWebClient(string url)
{
string strReturn = null;
WebClient client = new WebClient();
//client.Headers.Add(HttpRequestHeader.Accept, @"text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8");
//client.Headers.Add(HttpRequestHeader.Referer, null);
//client.Headers.Add(HttpRequestHeader.UserAgent, @" Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1750.154 Safari/537.36");
//client.Headers.Add(HttpRequestHeader.ContentType, "application/octet-stream"); string strExtension = Path.GetExtension(url); //扩展名
if (String.IsNullOrEmpty(strExtension))
{
Stream stream = client.OpenRead(url);
StreamReader streamReader = new StreamReader(stream, Encoding.GetEncoding("utf-8"));
strReturn = streamReader.ReadToEnd();
streamReader.Close();
stream.Close();
}
else
{
string path = "../WebSnap/DownLoad/";
path = System.Web.HttpContext.Current.Server.MapPath(path); //自动创建文件夹
if (!Directory.Exists(path))
{
Directory.CreateDirectory(path);
}
path += DateTime.Now.ToString("hhmmss") + strExtension; client.DownloadFile(new Uri(url), path);
}
client.Dispose();
return strReturn;
} /// <summary>
/// 通过WebRequest获取远程资源
/// </summary>
/// <param name="url"></param>
/// <returns></returns>
public static string GetByWebRequest(string url)
{
string strReturn = null;
Uri uri = new Uri(url);
WebRequest request = WebRequest.Create(uri);
WebResponse response = request.GetResponse();
Stream stream = response.GetResponseStream(); string strExtension = Path.GetExtension(url); //扩展名
if (String.IsNullOrEmpty(strExtension))
{
StreamReader streamReader = new StreamReader(stream, Encoding.GetEncoding("utf-8"));
strReturn = streamReader.ReadToEnd();
streamReader.Close();
stream.Close();
response.Close();
}
else
{
string fileName = DateTime.Now.ToString("hhmmss") + strExtension;
long length = response.ContentLength;
strReturn = SaveFile(ref stream, fileName, length);
}
return strReturn;
} /// <summary>
/// 通过WebRequest的Http特定实现获取远程资源
/// </summary>
/// <param name="url">远程地址</param>
/// <returns></returns>
public static string GetByHttpWebRequest(string url)
{
string strReturn = null;
Uri uri = new Uri(url);
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(uri);
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
Stream stream = response.GetResponseStream(); string strExtension = Path.GetExtension(url); //扩展名
if (String.IsNullOrEmpty(strExtension))
{
StreamReader streamReader = new StreamReader(stream, System.Text.Encoding.GetEncoding("utf-8"));
strReturn = streamReader.ReadToEnd();
streamReader.Close();
stream.Close();
response.Close();
}
else
{
string fileName = DateTime.Now.ToString("hhmmss") + strExtension;
long length = response.ContentLength;
strReturn = SaveFile(ref stream, fileName, length);
}
return strReturn;
} /// <summary>
/// FileStream保存文件
/// </summary>
/// <param name="stream"></param>
private static string SaveFile(ref Stream stream, string fileName, long length)
{
byte[] buffer = new byte[length];
stream.Read(buffer, , buffer.Length);
stream.Close(); string path = AppDomain.CurrentDomain.BaseDirectory + "DownLoad\\" + fileName;
FileStream fileStream = new FileStream(path, FileMode.OpenOrCreate, FileAccess.Write);
fileStream.Write(buffer, , buffer.Length);
fileStream.Flush();
fileStream.Close(); return path;
} /// <summary>
/// 保存图片
/// </summary>
/// <param name="stream"></param>
private static string SavePicture(ref Stream stream, string fileName)
{
System.Drawing.Image image = System.Drawing.Image.FromStream(stream);
stream.Close();
string path = "../WebSnap/DownLoad/";
path = System.Web.HttpContext.Current.Server.MapPath(path); //自动创建文件夹
if (!Directory.Exists(path))
{
Directory.CreateDirectory(path);
}
path += fileName; image.Save(path, System.Drawing.Imaging.ImageFormat.Png);
image.Dispose(); //释放资源 return path;
}
}
}

注意:

“utf-8”应与指定网页的编码对应。

可以看到HttpWebRequest 方式最复杂,但确提供了更多的选择性。

有的网站检测客户端的UserAgent!如163

最新文章

  1. C++中三种new的用法
  2. php技术之路
  3. SQL基础之select
  4. HDFS中高可用性HA的讲解
  5. Codevs 1191 数轴染色
  6. [Unity]背包效果-使用NGUI实现物品的拖拽效果Drag
  7. idea出现Error:Maven Resources Compiler: Maven project configuration required for module &#39;market&#39; isn&#39;t available.
  8. 虚拟机安装Ubuntu14.04打开FireFox提示Server not found
  9. 区间DP 基本题集
  10. python-算法基础
  11. Pytorch中RoI pooling layer的几种实现
  12. 如何使用Jquery直接导入记事本的内容
  13. Qt界面UI之QML初见(学习笔记四)
  14. [ 转载 ] Tcp三次握手和四次挥手详解
  15. 【机器学习算法-python实现】矩阵去噪以及归一化
  16. iOS UI-(多)视图控制器的生命周期、加载方法和模态视图方法以及屌丝方法
  17. (字典树模板)统计难题--hdu--1251
  18. win10 下Oracle安装
  19. android studio - 解决Android Studio不停的Indexing的问题
  20. Centos6.5安装JDK环境

热门文章

  1. 使用 document.onreadystatechange()来判断页面加载完
  2. 使用SignalR 提高B2C商城用户体验1
  3. Spring 教程(二)
  4. HDU4738 Caocao&#39;s Bridges 无向图的桥
  5. 2015年10月23日JS笔记
  6. [LeetCode]Evaluate Reverse Polish Notation(逆波兰式的计算)
  7. mysql日期加减问题
  8. Adobe CS6系列PJ方法
  9. leetcode@ [129] Sum Root to Leaf Numbers (DFS)
  10. leetcode@ [139/140] Word Break &amp; Word Break II