博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C# 之 服务端获取远程资源
阅读量:7050 次
发布时间:2019-06-28

本文共 5729 字,大约阅读时间需要 19 分钟。

  获取指定网页的远程资源可使用 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    {        ///         /// 通过WebClient获取远程资源        ///         ///         /// 
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; } /// /// 通过WebRequest获取远程资源 /// /// ///
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; } /// /// 通过WebRequest的Http特定实现获取远程资源 /// /// 远程地址 ///
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; } /// /// FileStream保存文件 /// /// private static string SaveFile(ref Stream stream, string fileName, long length) { byte[] buffer = new byte[length]; stream.Read(buffer, 0, buffer.Length); stream.Close(); string path = AppDomain.CurrentDomain.BaseDirectory + "DownLoad\\" + fileName; FileStream fileStream = new FileStream(path, FileMode.OpenOrCreate, FileAccess.Write); fileStream.Write(buffer, 0, buffer.Length); fileStream.Flush(); fileStream.Close(); return path; } /// /// 保存图片 /// /// 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

 

转载地址:http://xbdol.baihongyu.com/

你可能感兴趣的文章
05-spark streaming & kafka
查看>>
python杂记
查看>>
cd 简化命令
查看>>
LeetCode--205--同构字符串
查看>>
python-ConfigParser模块【读写配置文件】
查看>>
wireshark使用方法总结
查看>>
Window Server 2008 R2 TFS2010 安装前的准备
查看>>
20141123
查看>>
translucent 属性
查看>>
android listView嵌套gridview的使用心得
查看>>
[ES7] Descorator: evaluated & call order
查看>>
安卓动态调试七种武器之离别钩 – Hooking(上)
查看>>
从P6 EPPM 8 R3 到P6 EPPM 16 R1 有哪些改变?
查看>>
Android Studio2.0 教程从入门到精通Windows版 - 安装篇
查看>>
Linux 系统磁盘满处理方法
查看>>
Java HashMap Demo
查看>>
yaml官方介绍
查看>>
three.js模型
查看>>
网络流24题 餐巾计划问题
查看>>
基于 Android NDK 的学习之旅-----序言
查看>>