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 辅助类的更多相关文章

  1. Java的几个同步辅助类

    Java为我们提供了一些同步辅助类,利用这些辅助类我们可以在多线程编程中,灵活地把握线程的状态. CountDownLatch CountDownLatch一个同步辅助类,在完成一组正在其他线程中执行 ...

  2. ASP.NET Core 中文文档 第四章 MVC(3.6.2 )自定义标签辅助类(Tag Helpers)

    原文:Authoring Tag Helpers 作者:Rick Anderson 翻译:张海龙(jiechen) 校对:许登洋(Seay) 示例代码查看与下载 从 Tag Helper 讲起 本篇教 ...

  3. DateHelper.cs日期时间操作辅助类C#

    //==================================================================== //** Copyright © classbao.com ...

  4. 同步辅助类CountDownLatch用法

    CountDownLatch是一个同步辅助类,犹如倒计时计数器,创建对象时通过构造方法设置初始值,调用CountDownLatch对象的await()方法则使当前线程处于等待状态,调用countDow ...

  5. 基于MemoryCache的缓存辅助类

    背景: 1. 什么是MemoryCache? memoryCache就是用电脑内存做缓存处理 2.使用范围? 可用于不常变的数据,进行保存在内存中,提高处理效率 代码: /// <summary ...

  6. java中被各种XXUtil/XXUtils辅助类恶心到了,推荐这种命名方法

    且看一下有多少个StringUtils 列举一下XXUtil/XXUtils恶劣之处 1. 不知道该用XXUtil还是用XXUtils, 或者XXHelper, XXTool 2. 不知道该用a.ja ...

  7. NPOI操作Excel辅助类

    /// <summary> /// NPOI操作excel辅助类 /// </summary> public static class NPOIHelper { #region ...

  8. ByteBuf和相关辅助类

    当我们进行数据传输的时候,往往需要使用到缓冲区,常用的缓冲区就是JDK NIO类库提供的java.nio.Buffer. 实际上,7种基础类型(Boolean除外)都有自己的缓冲区实现,对于NIO编程 ...

  9. Bootstrap<基础九>辅助类

    Bootstrap 中的一些可能会派上用场的辅助类. 文本 以下不同的类展示了不同的文本颜色.如果文本是个链接鼠标移动到文本上会变暗: 类 描述   .text-muted "text-mu ...

  10. 压缩文本、字节或者文件的压缩辅助类-GZipHelper

    下面为大家介绍一.NET下辅助公共类GZipHelper,该工具类主要作用是对文本.字符.文件等进行压缩与解压.该类主要使用命名空间:System.IO.Compression下的GZipStream ...

随机推荐

  1. Firefox中Vimperator插件配置

    具体配置什么,同学们可以网上看下善用佳软关于Vimperator的说明,在这里我列出两条我个人觉得最有用的命令 set nextpattern=\s*下一页|下一张|下一篇|下页|后页\s*,^\bn ...

  2. COUNT()函数的使用

    COUNT函数 让我们能够数出在表格中有多少笔资料被选出来.它的语法是: SELECT COUNT("栏位名")        FROM "表格名" 举例来说, ...

  3. ppt怎么换背景图片|PPT换背景设置方法

    PPT怎么换背景?PPT背景可谓是PPT幻灯片的灵魂,优美绚丽的PPT背景能为自己做的PPT幻灯片锦上添花.今天,格子啦小编就教大家PPT换背景的方法,让你不再羡慕别人所做PPT的美丽背景,也可以自己 ...

  4. C题

    C - C Time Limit:3000MS     Memory Limit:0KB     64bit IO Format:%lld & %llu   Description   Ass ...

  5. ASP.NET中Request.ApplicationPath、Request.FilePath、Request.Path、.Request.MapPath

    1.Request.ApplicationPath->当前应用的目录 2.Request.FilePath->对应于iis的虚拟目录   如 URL http://mockte.com/1 ...

  6. 托管host

    托管在googlecode的host https://smarthosts.googlecode.com/svn/trunk/hosts

  7. poj 2516Minimum Cost

    http://poj.org/problem?id=2516 #include<cstdio> #include<cstring> #include<algorithm& ...

  8. cholesky分解

        接着LU分解继续往下,就会发展出很多相关但是并不完全一样的矩阵分解,最后对于对称正定矩阵,我们则可以给出非常有用的cholesky分解.这些分解的来源就在于矩阵本身存在的特殊的 结构.对于矩阵 ...

  9. Convert Sorted Array to Binary Search Tree——LeetCode

    Given an array where elements are sorted in ascending order, convert it to a height balanced BST. 题目 ...

  10. HDU 4627 There are many unsolvable problem in the world.It could be about one or about zero.But this time it is about bigger number.

    题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=82974#problem/E 解题思路:数论,从一个数的中间开始往两边找,找到两 ...