zoukankan      html  css  js  c++  java
  • 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: empali2.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: empali2.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: empali2.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:webrooterrorslength.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);
    }
    }

  • 相关阅读:
    vue / js使用video获取视频时长
    vuex的使用
    eclipse中没有tomcat小猫
    Windows下安装Redis服务
    postman上传文件对参数的contentType类型设置方式
    !与&&优先级的问题
    备份数据库中的某个表的数据报错Statement violates GTID consistency
    Error 'Cannot add or update a child row: a foreign key constraint fails故障解决
    解除项目与其他服务的强依赖
    常见的几种异常类型 Exception
  • 原文地址:https://www.cnblogs.com/taomylife/p/3216931.html
Copyright © 2011-2022 走看看