C# 之 服务端获取远程资源
获取指定网页的远程资源可使用 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
C# 之 服务端获取远程资源的更多相关文章
- ftpget 从Windows FTP服务端获取文件
/********************************************************************************* * ftpget 从Windows ...
- IE8下服务端获取客户端文件的路径为C:/fakePath问题的解决方案
上一篇文章上提到,IE8下服务端获取客户端文件的路径时,会变成C:/fakePath问题,于是乎通过文件路径去获得文件大小就失败了. 上网搜了一下,主要原因是IE8因为安全考虑,在上传文件时屏蔽了真实 ...
- Android从服务端获取json解析显示在客户端上面
Android从服务端获取json解析显示在客户端上面 百度经验:jingyan.baidu.com 首先说一下Json数据的最基本的特点,Json数据是一系列的键值对的集合,和XML数据来比,Jso ...
- 服务端获取客户端html页面内容-2013-6-28-2
客户端怎么提交 整个html页面? 分析: 1>我们知道b/s模式,也知道http协议.服务端想要获取客户端的数据,客户端就 必须提交给它,服务器才能获取到. 2> ...
- springboot 服务端获取前端传过来的参数7种方式
下面为7种服务端获取前端传过来的参数的方法 1.直接把表单的参数写在Controller相应的方法的形参中,适用于GET 和 POST请求方式 这种方式不会校验请求里是否带参数,即下面的userna ...
- kbengine mmo源码(完整服务端源码+资源+完整客户端源码)
本项目作为kbengine服务端引擎的客户端演示而写 更新kbengine插件库(https://github.com/kbengine/kbengine_unity3d_plugins): ...
- C#微信小程序服务端获取用户解密信息
using AIOWeb.Models; using Newtonsoft.Json; using Newtonsoft.Json.Linq; using System; using System.C ...
- 基于NIO的同步非阻塞编程完整案例,客户端发送请求,服务端获取数据并返回给客户端数据,客户端获取返回数据
这块还是挺复杂的,挺难理解,但是多练几遍,多看看研究研究其实也就那样,就是一个Selector轮询的过程,这里想要双向通信,客户端和服务端都需要一个Selector,并一直轮询, 直接贴代码: Ser ...
- c++ 网络编程(四) LINUX/windows下 socket 基于I/O复用的服务器端代码 解决多进程服务端创建进程资源浪费问题
原文作者:aircraft 原文链接:https://www.cnblogs.com/DOMLX/p/9613861.html 好了,继上一篇说到多进程服务端也是有缺点的,每创建一个进程就代表大量的运 ...
随机推荐
- HDU 1163 Eddy's digital Roots
Eddy's digital Roots Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Oth ...
- [转] C# Winform 拦截关闭按钮触发的事件
原文 C# Winform 拦截关闭按钮触发的事件 用户关闭软件时,软件一般会给“是否确认关闭”的提示. 通常,我们把它写在FormClosing 事件中,如果确定关闭,就关闭:否则把FormClos ...
- Android中Bitmap和Drawable,等相关内容
一.相关概念 1.Drawable就是一个可画的对象,其可能是一张位图(BitmapDrawable),也可能是一个图形(ShapeDrawable),还有可能是一个图层(LayerDrawable) ...
- POJ 1655-Balancing Act(树形dp)
题意: 求n个节点的树中哪个节点删除以后得到的最大连通分量最小. 分析:同上题 #include <map> #include <set> #include <list& ...
- 《Python基础教程(第二版)》学习笔记 -> 第三章 使用字符串
本章讲话介绍如何使用字符串格式化其他的值,并简单了解一下利用字符串的分割.联接.搜索等方法能做些什么. 基本字符串操作 所有标准的序列操作(索引.分片.乘法.判断成员资格.求长度.取最大最小值)对字符 ...
- 黑盒测试用例设计方法&理论联系实际-> 功能图法
一. 概念 功能图由状态迁移图和布尔函数组成.状态迁移图用状态和迁移来描述.一个状态指出数据输入的位置(或时间),而迁移则指明状态的改变.同时要依靠判定表或因果图表示的逻辑功能.例,一个简化的自动出纳 ...
- js跟着鼠标移动的文字
废话不多说,直接上代码,有注释: <head> <title></title> <style type="text/css"> sp ...
- class0513(html)
精通DIV+CSS Meta 1.div span 2.三种样式表 内联样式(行内样式) 嵌入样式 外部样式 就近原则 3.常见样式 复合样式background border css单位 % px ...
- r语言入门资料
最近有好多r语言的爱好者问我r语言的事情,在百度上简单的收一收,感觉都在扯淡,真正适合初学者入门的资料几乎没有,比如最开始用什么编辑器比较好,在哪下载,最开始学习的例子有什么? 在日本网站上反倒是找 ...
- Java中的IP对象以及本地域名解析
本地域名解析操作步骤: 1.打开C:\WINDOWS\system32\drivers\etc目录 2.找到host文件,用记事本打开 3.添加“空间IP 域名” package WebProgra ...