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 ...
随机推荐
- 深入了解使用egret.WebSocket
概念 本教程不讲解TCP/IP协议,Socket属于哪层,消息包体怎么设计等,主讲 egret.WebSocket 使用示例 与 protobuf 使用示例. 在使用egret.WebSocket之前 ...
- 关于$GLOBALS['ecs']->table()的问题?
$ecs对象定义数据库和表前缀 class ECS { var $db_name = ''; var $prefix = 'ecs_'; function ECS($db_name, $prefix) ...
- Net Core 项目实战之权限管理系统(0)
0 前言 Net Core 项目实战之权限管理系统(0) 无中生有 0 http://www.cnblogs.com/fonour/p/5848933.html 学习的最好方法就是动手去做,这里以 ...
- jquery ajax用例样板
$.ajax({ url: '${managerPath}/customer/updateOrder.do', type: 'POST', async: false, data: { id: date ...
- 【Android】listview优化
http://www.cnblogs.com/over140/archive/2011/03/23/1991100.html http://blog.sina.com.cn/s/blog_5fc933 ...
- Preventing Web Attacks with Apache
http://www.boyunjian.com/do/article/snapshot.do?uid=net.csdn.blog/wurangy050/article/details/5287235
- poj 1573Robot Motion
http://poj.org/problem?id=1573 #include<cstdio> #include<cstring> #include<algorithm& ...
- 统计指定时间段的访问真正WEB页面(去除静态请求)的IP的TOP100排行
最近就在磨这个脚本以达到SEO同事要求哈. awk -v b=[21/Apr/2015:15:46 -v a=[21/Apr/2015:16:46 '$4 > b && $4 & ...
- 如何让Qt 的程序等待一段时间(等待的同时,还让主界面刷新图片)good
后面这种方法可以不影响其他线程的响应,又可以达到等待的目的. 测试的一个小例子: class Widget : public QWidget { Q_OBJECT public: Widget(QWi ...
- html动态编辑框
简述: 随着在输入框中增加字符,动态矿高度增加(IE9及以上 chrome firefox) 由于IE8 不支持oninput函数,所以不能实现此效果 事件函数: function feedDivO ...