Http 辅助类
using System;
using System.Drawing;
using System.IO;
using System.Net;
using System.Net.Cache;
using System.Text; namespace ePlatform.Processor
{
/// <summary>
/// Http处理
/// </summary>
public static class Http
{
/// <summary>
/// 创建访问URL的Response
/// </summary>
/// <param name="uri"></param>
/// <param name="mycookies"></param>
/// <returns></returns>
public static HttpWebResponse GetWebResponse(string uri, ref CookieCollection mycookies)
{
try
{
//请求
var req = HttpWebRequest.Create(uri) as HttpWebRequest;
var cookies = new CookieContainer(); req.KeepAlive = true;
req.AllowAutoRedirect = true;
req.AllowWriteStreamBuffering = true;
req.Credentials = CredentialCache.DefaultCredentials;
req.Referer = "http://www.lanxe.net/";
req.Timeout = 20000;
req.UserAgent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; .NET4.0C; .NET4.0E)";
req.CookieContainer = cookies; //加入额外的Cookie
if (mycookies != null)
{
foreach (Cookie item in mycookies)
{
cookies.Add(item);
}
} //回应
var res = req.GetResponse() as HttpWebResponse;
mycookies = cookies.GetCookies(req.RequestUri);
res.Cookies = mycookies; return res;
}
catch
{
return null;
}
} /// <summary>
/// 向网站Post数据
/// </summary>
/// <param name="uri"></param>
/// <param name="mycookies"></param>
/// <param name="encoding"></param>
/// <param name="data"></param>
/// <returns></returns>
public static string PostData(string uri, ref CookieCollection mycookies, string encoding, string data)
{
var encode = getEncoding(encoding);
var datas = encode.GetBytes(data);
var length = datas.Length; try
{
//请求
var req = HttpWebRequest.Create(uri) as HttpWebRequest;
var cookies = new CookieContainer();
var cache = new RequestCachePolicy(RequestCacheLevel.NoCacheNoStore); req.KeepAlive = true;
req.AllowAutoRedirect = true;
req.AllowWriteStreamBuffering = true;
req.Credentials = CredentialCache.DefaultCredentials;
req.ContentType = "application/x-www-form-urlencoded;charset=utf-8";
req.Accept = "*/*";
req.Referer = "http://translate.google.com.hk/";
req.Timeout = 20000;
req.UserAgent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; .NET4.0C; .NET4.0E)";
req.CachePolicy = cache;
req.Method = "POST";
req.ContentLength = length;
req.CookieContainer = cookies; //加入额外的Cookie
if (mycookies != null)
{
foreach (Cookie item in mycookies)
{
cookies.Add(item);
}
} //发送内容
var stream = req.GetRequestStream();
stream.Write(datas, 0, length);
stream.Close(); //获取返回的数据
var res = (HttpWebResponse)req.GetResponse();
mycookies = cookies.GetCookies(req.RequestUri);
return getHtml(res, encode);
}
catch
{
return null;
}
} /// <summary>
/// 获取网页源代码
/// </summary>
/// <param name="uri"></param>
/// <param name="encodeName"></param>
/// <param name="outCookies"></param>
/// <returns></returns>
public static string GetHtml(string uri, string encodeName, ref CookieCollection mycookies)
{
var response = GetWebResponse(uri, ref mycookies);
if (response == null)
{
return null;
}
try
{
var encode = getEncoding(encodeName);
return getHtml(response, encode);
}
catch
{
return null;
}
} /// <summary>
/// 获取网页流图像
/// </summary>
/// <param name="uri"></param>
/// <param name="mycookies"></param>
/// <param name="length"></param>
/// <returns></returns>
public static Image GetImage(string uri, ref CookieCollection mycookies, out long length)
{
length = 0;
var res = GetWebResponse(uri, ref mycookies);
if (res == null)
{
return null;
}
try
{
length = res.ContentLength;
Stream stream = res.GetResponseStream();
return Image.FromStream(stream, true);
}
catch (Exception ex)
{
throw ex;
}
} /// <summary>
/// 根据名称获取网页编码格式
/// </summary>
/// <param name="name"></param>
/// <returns></returns>
static Encoding getEncoding(string name)
{
if (string.IsNullOrEmpty(name))
{
return Encoding.UTF8;
}
else if (name.ToLower() == "default")
{
return Encoding.Default;
}
else
{
return Encoding.GetEncoding(name);
}
} /// <summary>
/// 从Response中获取HTML内容
/// </summary>
/// <param name="res"></param>
/// <param name="encode"></param>
/// <returns></returns>
static string getHtml(HttpWebResponse res, Encoding encode)
{
var outs = new StringBuilder();
var stream = res.GetResponseStream();
var reader = new StreamReader(stream, encode); // 每次读取1024
var buffer = new char[1024];
var count = reader.Read(buffer, 0, 1024);
while (count > 0)
{
outs.Append(new String(buffer, 0, count));
count = reader.Read(buffer, 0, 1024);
} // 读取完毕
reader.Close();
stream.Close(); return outs.ToString();
}
}
}
Http 辅助类的更多相关文章
- Java的几个同步辅助类
Java为我们提供了一些同步辅助类,利用这些辅助类我们可以在多线程编程中,灵活地把握线程的状态. CountDownLatch CountDownLatch一个同步辅助类,在完成一组正在其他线程中执行 ...
- ASP.NET Core 中文文档 第四章 MVC(3.6.2 )自定义标签辅助类(Tag Helpers)
原文:Authoring Tag Helpers 作者:Rick Anderson 翻译:张海龙(jiechen) 校对:许登洋(Seay) 示例代码查看与下载 从 Tag Helper 讲起 本篇教 ...
- DateHelper.cs日期时间操作辅助类C#
//==================================================================== //** Copyright © classbao.com ...
- 同步辅助类CountDownLatch用法
CountDownLatch是一个同步辅助类,犹如倒计时计数器,创建对象时通过构造方法设置初始值,调用CountDownLatch对象的await()方法则使当前线程处于等待状态,调用countDow ...
- 基于MemoryCache的缓存辅助类
背景: 1. 什么是MemoryCache? memoryCache就是用电脑内存做缓存处理 2.使用范围? 可用于不常变的数据,进行保存在内存中,提高处理效率 代码: /// <summary ...
- java中被各种XXUtil/XXUtils辅助类恶心到了,推荐这种命名方法
且看一下有多少个StringUtils 列举一下XXUtil/XXUtils恶劣之处 1. 不知道该用XXUtil还是用XXUtils, 或者XXHelper, XXTool 2. 不知道该用a.ja ...
- NPOI操作Excel辅助类
/// <summary> /// NPOI操作excel辅助类 /// </summary> public static class NPOIHelper { #region ...
- ByteBuf和相关辅助类
当我们进行数据传输的时候,往往需要使用到缓冲区,常用的缓冲区就是JDK NIO类库提供的java.nio.Buffer. 实际上,7种基础类型(Boolean除外)都有自己的缓冲区实现,对于NIO编程 ...
- Bootstrap<基础九>辅助类
Bootstrap 中的一些可能会派上用场的辅助类. 文本 以下不同的类展示了不同的文本颜色.如果文本是个链接鼠标移动到文本上会变暗: 类 描述 .text-muted "text-mu ...
- 压缩文本、字节或者文件的压缩辅助类-GZipHelper
下面为大家介绍一.NET下辅助公共类GZipHelper,该工具类主要作用是对文本.字符.文件等进行压缩与解压.该类主要使用命名空间:System.IO.Compression下的GZipStream ...
随机推荐
- 无法解析属性“mode”的值。错误为: 枚举值必须是以下各值中的一个: RemoteOnly, On, Off。
Off首字母要大写,注意大小写 <customErrors mode="Off"> <error statusCode="404" ...
- js join()函数将数组转换成字符串
join() 方法用于把数组中的所有元素放入一个字符串.作用是将数组转换为字符串,其作用和toString()相同. 元素是通过指定的分隔符进行分隔的. 例如: var asp=['H','ell', ...
- codeforces567E. President and Roads
题目大意:总统要回家,会经过一些街道,每条街道都是单向的并且拥有权值.现在,为了让总统更好的回家,要对每一条街道进行操作:1)如果该街道一定在最短路上,则输出“YES”.2)如果该街道修理过后,该边所 ...
- Excel--java POi
import java.io.File; import java.io.FileOutputStream; import org.apache.commons.io.FileUtils; import ...
- mongodb教程二
MongoDB 创建数据库: MongoDB 创建数据库的语法格式如下: use DATABASE_NAME 如果数据库不存在,则创建数据库,否则切换到指定数据库. 如果你想查看所有数据库,可以使用 ...
- Installshield更新时,新加dll未拷贝至安装目录问题完美解决【原创】
最近在发现在开发过程中新增的目录或文件(特别是dll\ocx\exe等二进制文件),在升级安装时拷贝失败. 经过一周的研究,完美解决办法: 对于新增的文件或目录,放到一个新的component中,并且 ...
- 14.4.3 Adaptive Hash Index 自适应hash index
14.4.3 Adaptive Hash Index 自适应hash index 自适应hash index(AHI) 让InnoDB 执行更像内存数据库在系统使用合适的负载组合和足够的内存用于Buf ...
- oracle连接总结(内连接、外连接、自然连接,交叉连接,自连接)
1.简述 1) 两个表的连接,是通过将一个表中的一列或者多列同另一个表中的列链接而建立起来的.用来连接两张表的表达式组成了连接条件.当连接成功后,第二张表中的数据就同第一张表连接起来了,并形成了复合 ...
- javascript 关闭窗口,弹出新窗口并带有确认关闭对话框解决办法
在很多人眼里,北京是一个物欲横流的社会,生活节奏之快,让你一丝都不能停下来,走在路上伴随着人群急速往前涌,或许有些人都不知道要去哪.也不知道自己想要的是什么?在一个浮躁的社会里,多了一些浮躁的人,到处 ...
- L - Vases and Flowers - hdu 4614(区间操作)
题意:有两种操作,第一种从A开始插花,如果有花就跳到下一个,然后输出最后一个花瓶的编号,如果花瓶不够把多余的花丢掉.操作2把区间清空 分析:很明显的线段树操作,就是插花的时候麻烦一下,需要先找出来他剩 ...