HttpWebRequest后台读取网页类
using System;
using System.Linq;
using System.Collections.Generic;
using System.Web;
using System.Configuration;
using System.Net;
using System.IO;
using System.Text;
using System.Net.Security;
using System.Security.Authentication;
using System.Security.Cryptography.X509Certificates;
/// <summary>
/// 后台读取网页类,使用WebRequest对象
/// </summary>
public class RemoteWeb
{
/// <summary>
/// WebRequestPOST方式读取远程数据
/// </summary>
/// <param name="_url">远程请求地址,需要加参数。</param>
/// <param name="_remoteEncoding">远程编码</param>
/// <returns>编码为UTF-8的字符串</returns>
public static string Post(string _url, Encoding _remoteEncoding)
{
// 发送数据
Encoding utf8 = System.Text.Encoding.UTF8;
byte[] a = utf8.GetBytes(_url.Split('?')[1]);
byte[] data = Encoding.Convert(utf8, _remoteEncoding, a);
if (_remoteEncoding == System.Text.Encoding.UTF8)
{
data = null;
data = a;
}
//byte[] data = _remoteEncoding.GetBytes(_url.Split('?')[1]);
//System.IO.File.WriteAllText(@"e:\temp\ali2.txt", utf8.GetString(data));
Uri url = new Uri(_url.Split('?')[0]);
HttpWebRequest req = HttpWebRequest.Create(url) as HttpWebRequest;
//设置超时
/* 财付通证书 */
//X509Store store = new X509Store("Root", StoreLocation.LocalMachine);
//store.Open(OpenFlags.ReadOnly | OpenFlags.OpenExistingOnly);
//X509Certificate2 cer = store.Certificates.Find(X509FindType.FindBySubjectName, "1204816901", false)[0];
//验证服务器证书回调自动验证 SSL
if (_url.Split('?')[0].Substring(0, 5) == "https")
{
ServicePointManager.ServerCertificateValidationCallback = new System.Net.Security.RemoteCertificateValidationCallback(RemoteWeb.CheckValidationResult);
}
// 证书
if (_url.Split('?')[0].Substring(0, 5) == "https" && _url.Split('?')[0].IndexOf("tenpay.com") != -1)
{
req.ClientCertificates.Add(new X509Certificate2("e:/webroot/cer/1204816901_20100716110715.pfx", "1204816901"));
}
req.Timeout = 30000;
req.AllowAutoRedirect = true;
req.KeepAlive = true;
req.Method = "POST";
req.ContentType = "application/x-www-form-urlencoded";
req.ContentLength = data.Length;
//req.EnableSsl = true;
Stream stream = req.GetRequestStream();
stream.Write(data, 0, data.Length);
stream.Close();
HttpWebResponse rep = req.GetResponse() as HttpWebResponse;
Stream receiveStream = rep.GetResponseStream();// Pipes the stream to a higher level stream reader with the required encoding format.
StreamReader readStream = new StreamReader(receiveStream, _remoteEncoding);
Char[] read = new Char[256];
int count = readStream.Read(read, 0, 256);
StringBuilder sb = new StringBuilder("");
while (count > 0)
{
String readstr = new String(read, 0, count);
sb.Append(readstr);
count = readStream.Read(read, 0, 256);
}
rep.Close();
receiveStream.Close();
readStream.Close();
req = null;
stream = null;
receiveStream = null;
byte[] c = _remoteEncoding.GetBytes(sb.ToString());
byte[] d = Encoding.Convert(_remoteEncoding, utf8, c);
return utf8.GetString(d);
}
/// <summary>
/// WebRequestPOST方式读取远程数据(GB2312专用)
/// </summary>
/// <param name="_url">远程请求地址,需要加参数。</param>
/// <returns>编码为UTF-8的字符串</returns>
public static string PostGB2312(string _url)
{
// 发送数据
Encoding utf8 = System.Text.Encoding.UTF8;
byte[] data = System.Text.Encoding.GetEncoding("gb2312").GetBytes(_url.Split('?')[1]);
//System.IO.File.WriteAllText(@"e:\temp\ali2.txt", utf8.GetString(data));
Uri url = new Uri(_url.Split('?')[0]);
HttpWebRequest req = HttpWebRequest.Create(url) as HttpWebRequest;
//设置超时
/* 财付通证书 */
//X509Store store = new X509Store("Root", StoreLocation.LocalMachine);
//store.Open(OpenFlags.ReadOnly | OpenFlags.OpenExistingOnly);
//X509Certificate2 cer = store.Certificates.Find(X509FindType.FindBySubjectName, "1204816901", false)[0];
//验证服务器证书回调自动验证 SSL
if (_url.Split('?')[0].Substring(0, 5) == "https")
{
ServicePointManager.ServerCertificateValidationCallback = new System.Net.Security.RemoteCertificateValidationCallback(RemoteWeb.CheckValidationResult);
}
if (_url.Split('?')[0].Substring(0, 5) == "https" && _url.Split('?')[0].IndexOf("tenpay.com") != -1)
{
req.ClientCertificates.Add(new X509Certificate2("e:/webroot/cer/1204816901_20100716110715.pfx", "1204816901"));
}
req.Timeout = 30000;
req.AllowAutoRedirect = true;
req.KeepAlive = true;
req.Method = "POST";
req.ContentType = "application/x-www-form-urlencoded";
req.ContentLength = data.Length;
//req.EnableSsl = true;
Stream stream = req.GetRequestStream();
stream.Write(data, 0, data.Length);
stream.Close();
HttpWebResponse rep = req.GetResponse() as HttpWebResponse;
Stream receiveStream = rep.GetResponseStream();// Pipes the stream to a higher level stream reader with the required encoding format.
StreamReader readStream = new StreamReader(receiveStream, System.Text.Encoding.GetEncoding("gb2312"));
Char[] read = new Char[256];
int count = readStream.Read(read, 0, 256);
StringBuilder sb = new StringBuilder("");
while (count > 0)
{
String readstr = new String(read, 0, count);
sb.Append(readstr);
count = readStream.Read(read, 0, 256);
}
rep.Close();
receiveStream.Close();
readStream.Close();
req = null;
stream = null;
receiveStream = null;
byte[] c = System.Text.Encoding.GetEncoding("gb2312").GetBytes(sb.ToString());
byte[] d = Encoding.Convert(System.Text.Encoding.GetEncoding("gb2312"), utf8, c);
return utf8.GetString(d);
}
/// <summary>
/// WebRequestPOST方式读取远程数据(GBK专用)
/// </summary>
/// <param name="_url">远程请求地址,需要加参数。</param>
/// <returns>编码为UTF-8的字符串</returns>
public static string PostGBK(string _url)
{
// 发送数据
Encoding utf8 = System.Text.Encoding.UTF8;
byte[] data = System.Text.Encoding.GetEncoding("GBK").GetBytes(_url.Split('?')[1]);
//System.IO.File.WriteAllText(@"e:\temp\ali2.txt", utf8.GetString(data));
Uri url = new Uri(_url.Split('?')[0]);
HttpWebRequest req = HttpWebRequest.Create(url) as HttpWebRequest;
//设置超时
/* 财付通证书 */
//X509Store store = new X509Store("Root", StoreLocation.LocalMachine);
//store.Open(OpenFlags.ReadOnly | OpenFlags.OpenExistingOnly);
//X509Certificate2 cer = store.Certificates.Find(X509FindType.FindBySubjectName, "1204816901", false)[0];
//验证服务器证书回调自动验证 SSL
if (_url.Split('?')[0].Substring(0, 5) == "https")
{
ServicePointManager.ServerCertificateValidationCallback = new System.Net.Security.RemoteCertificateValidationCallback(RemoteWeb.CheckValidationResult);
}
if (_url.Split('?')[0].Substring(0, 5) == "https" && _url.Split('?')[0].IndexOf("tenpay.com") != -1)
{
req.ClientCertificates.Add(new X509Certificate2("e:/webroot/cer/1204816901_20100716110715.pfx", "1204816901"));
}
req.Timeout = 30000;
req.AllowAutoRedirect = true;
req.KeepAlive = true;
req.Method = "POST";
req.ContentType = "application/x-www-form-urlencoded";
req.ContentLength = data.Length;
//req.EnableSsl = true;
Stream stream = req.GetRequestStream();
stream.Write(data, 0, data.Length);
stream.Close();
HttpWebResponse rep = req.GetResponse() as HttpWebResponse;
Stream receiveStream = rep.GetResponseStream();// Pipes the stream to a higher level stream reader with the required encoding format.
StreamReader readStream = new StreamReader(receiveStream, System.Text.Encoding.GetEncoding("gb2312"));
Char[] read = new Char[256];
int count = readStream.Read(read, 0, 256);
StringBuilder sb = new StringBuilder("");
while (count > 0)
{
String readstr = new String(read, 0, count);
sb.Append(readstr);
count = readStream.Read(read, 0, 256);
}
rep.Close();
receiveStream.Close();
readStream.Close();
req = null;
stream = null;
receiveStream = null;
byte[] c = System.Text.Encoding.GetEncoding("GBK").GetBytes(sb.ToString());
byte[] d = Encoding.Convert(System.Text.Encoding.GetEncoding("GBK"), utf8, c);
return utf8.GetString(d);
}
public static bool CheckValidationResult(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors errors)
{ // Always accept
return true;
}
/// <summary>
/// WebRequestGET方式读取远程数据,默认超时30秒
/// </summary>
/// <param name="_url">远程请求地址,需要加参数。无参数可随意加一个。</param>
/// <param name="_remoteEncoding">远程编码</param>
/// <returns>编码为UTF-8的字符串</returns>
public static string GET(string _url, Encoding _remoteEncoding)
{
return GET(_url, _remoteEncoding, 30000);
}
/// <summary>
/// WebRequestGET方式读取远程数据,自定超时时间
/// </summary>
/// <param name="_url">远程请求地址,需要加参数。无参数可随意加一个。</param>
/// <param name="_remoteEncoding">远程编码</param>
/// <param name="_Timeout">超时秒数</param>
/// <returns>编码为UTF-8的字符串</returns>
public static string GET(string _url, Encoding _remoteEncoding, int _Timeout)
{
Encoding utf8 = System.Text.Encoding.UTF8;
//设置超时
HttpWebRequest req;
req = (HttpWebRequest)WebRequest.Create(_url);
req.Timeout = _Timeout;
req.Method = "GET";
req.ContentType = "application/x-www-form-urlencoded";
HttpWebResponse rep = (HttpWebResponse)req.GetResponse();
Stream receiveStream = rep.GetResponseStream();// Pipes the stream to a higher level stream reader with the required encoding format.
StreamReader readStream = new StreamReader(receiveStream, _remoteEncoding);
Char[] read = new Char[256];
int count = readStream.Read(read, 0, 256);
//Common.WriteTXT(@"e:\webroot\errors\length.txt", readStream.ReadToEnd().ToString());
StringBuilder sb = new StringBuilder("");
while (count > 0)
{
String readstr = new String(read, 0, count);
sb.Append(readstr);
count = readStream.Read(read, 0, 256);
}
rep.Close();
receiveStream.Close();
readStream.Close();
req = null;
receiveStream = null;
byte[] c = _remoteEncoding.GetBytes(sb.ToString());
byte[] d = Encoding.Convert(_remoteEncoding, utf8, c);
return utf8.GetString(d);
}
}
HttpWebRequest后台读取网页类的更多相关文章
- 正则表达式相关:C# 抓取网页类(获取网页中所有信息)
类的代码: using System; using System.Data; using System.Configuration; using System.Net; using System.IO ...
- [转]正则表达式相关:C# 抓取网页类(获取网页中所有信息)
using System; using System.Data; using System.Configuration; using System.Net; using System.IO; usin ...
- 利用backgroundwork----递归读取网页源代码,并下载href链接中的文件
今天闲着没事,研究了一下在线更新程序版本的问题.也是工作中的需要,开始不知道如何下手,各种百度也没有找到自己想要的,因为我的需求比较简单,所以就自己琢磨了一下.讲讲我的需求吧.自己在IIs上发布了一个 ...
- struts2中从后台读取数据到<s:select>
看到网上好多有struts2中从后台读取数据到<s:select>的,但都 不太详细,可能是我自己理解不了吧!所以我自己做了 一个,其中可能 有很多不好的地方,望广大网友指出 结果如图 p ...
- php 读取网页源码 , 导出成txt文件, 读取xls,读取文件夹下的所有文件的文件名
<?php // 读取网页源码$curl = curl_init();curl_setopt($curl, CURLOPT_URL, $url);curl_setopt($curl, CURLO ...
- Ajax的post方法,模拟 从后台读取数据小demo
$(document).ready(function() { //定义一个函数 function timer() { $.post("1.json", function(data, ...
- excel读取 工具类
package cn.yongche.utils; import java.io.File; import java.io.FileInputStream; import java.io.IOExce ...
- C#读取网页源码
#region 1.读取 网页源码 + static string ReadHtml(string urlStr,int type) /// <summary> /// 读取 网页源码 + ...
- Utils--前台调用后台接口工具类
Utils--前台调用后台接口工具类 package com.taotao.manage.httpclient; import java.io.IOException; import java.net ...
随机推荐
- 再次遇到\r\n转\r问题
帮助小伙伴做jenkins的环境搭建.以为5分钟的事情,但是发现了一个诡异的问题.总是提示SVN的url不合法“URL '%s' is not properly URI-encoded”. 由于选择了 ...
- ajax traditional
代码如下: <script> $(function () { var s = Array("1", "2", "3"); var ...
- cocos2d-x 3.0以上版本字体设置问题
cocos2d-x中的万年大坑,字体总算是有比较好的结局办法了.之前都是CCLabelTTF,CCLabelBMFont,CCLabelAtlas什么的,我只想说一句:好难用!毕竟是做游戏,那么难看的 ...
- Use Windows Azure AD to create SSO projects
Keywords Windows Azure AD, SSO Summary Use Windows Azure AD to create SSO projects Detailed Scenario ...
- npm配置代理
有时候可能因为使用代理,使用npm下载node模块会报"proxy"相关的错误,error提示ECONNECT,好像是这么拼的. 解决办法 1 配置代理 npm config se ...
- Day4_计算器
read me 1.构造三个函数,乘除(mad),加减(aas),去括号(par): 2.获取表达式字符串之后,判断是否包含“+-*/()”等字符,包含则下一步3:不包含,返回字符串: 3.par 函 ...
- Spring JdbcTemplate 的使用与学习(转)
紧接上一篇 (JdbcTemplate是线程安全的,因此可以配置一个简单的JdbcTemplate实例,将这个共享的实例注入到多个DAO类中.辅助的文档) Spring DAO支持 http://ww ...
- LABJS使用教程
知道LABJS这个概念其实早于sea.js,但因为sea.js是中文,并且第一眼就喜欢上sea.js的CommonJS所以并没有深入了解过LABJS. 在使用sea.js的时候不可避免的碰到js文件依 ...
- Git Pull 避免用户名和密码方法
在开发中使用的版本控制器时git , 每次使用命令"git pull"从服务器获得最新代码时,都需要输入用户名和密码,这样浪费了大量的时间和热情,在此背景下,本文在网上找到解决版本 ...
- html标签(一)
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...