using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.Net;
using System.Drawing;
using System.Globalization;
using System.Web;
using System.Diagnostics;
namespace SCC.Common
{
///
/// 网络相关帮助类
///
public class NetHelper
{
///
/// 获取IP
///
///
public static string GetIP()
{
string ip = string.Empty;
if (!string.IsNullOrEmpty(System.Web.HttpContext.Current.Request.ServerVariables["HTTP_VIA"]))
ip = Convert.ToString(System.Web.HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"]);
if (string.IsNullOrEmpty(ip))
ip = Convert.ToString(System.Web.HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"]);
if (string.IsNullOrEmpty(ip))
ip = System.Web.HttpContext.Current.Request.UserHostAddress;
return ip;
}
///
/// 通过IP地址获取所属国家,省份,城市
///
///
///
public static List GetCityByIP(string IP)
{
var url = string.Format(@"http://int.dpool.sina.com.cn/iplookup/iplookup.php?ip={0}", IP);
var htmlsource = GetUrlResponse(url, Encoding.GetEncoding("gbk"));
if (!string.IsNullOrWhiteSpace(htmlsource))
{
string[] sarray = htmlsource.Trim().Split(new string[] { "\t" }, StringSplitOptions.RemoveEmptyEntries);
if (sarray.Length == 6)
{
List result = new List();
result.Add(sarray[3]);
result.Add(sarray[4]);
result.Add(sarray[5]);
return result;
}
}
return null;
}
///
/// 请求Url资源
///
/// 目标Url地址
///
public static string GetUrlResponse(string url)
{
if (!string.IsNullOrWhiteSpace(url))
return GetUrlResponse(url, Encoding.UTF8);
return string.Empty;
}
///
/// 请求Url资源
///
/// 目标Url地址
/// 编码规则
///
public static string GetUrlResponse(string url, Encoding encode)
{
if (!string.IsNullOrWhiteSpace(url) && encode != null)
return GetUrlResponse(url, "GET", string.Empty, encode);
return string.Empty;
}
///
/// 请求Url资源
///
/// 目标Url地址
/// 请求方式
/// 请求附加数据
///
public static string GetUrlResponse(string url, string method, string postdata)
{
if (!string.IsNullOrWhiteSpace(url) && !string.IsNullOrWhiteSpace(method) && !string.IsNullOrWhiteSpace(postdata))
return GetUrlResponse(url, method, postdata, Encoding.UTF8);
return string.Empty;
}
///
/// 请求Url资源
///
/// 目标Url地址
/// 请求方式
/// 请求附加数据
/// 编码规则
///
public static string GetUrlResponse(string url, string method, string postdata, Encoding encode)
{
Stream responseStream = null;
try
{
HttpWebRequest request = HttpWebRequest.Create(url) as HttpWebRequest;
request.Method = method;
request.Timeout = 15 * 1000;
if (!string.IsNullOrEmpty(postdata))
{
byte[] bs = encode.GetBytes(postdata);
request.ContentLength = bs.Length;
request.ContentType = "application/x-www-form-urlencoded";
using (Stream requestStream = request.GetRequestStream())
{
requestStream.Write(bs, 0, bs.Length);
}
}
HttpWebResponse response = request.GetResponse() as HttpWebResponse;
if (response.StatusCode == HttpStatusCode.OK)
{
var contentencode = response.ContentEncoding;
if (contentencode == "gzip")
responseStream = new System.IO.Compression.GZipStream(response.GetResponseStream(), System.IO.Compression.CompressionMode.Decompress);
else
responseStream = response.GetResponseStream();
using (StreamReader sr = new StreamReader(responseStream, encode))
{
var content = sr.ReadToEnd();
return content.Replace("\r\n", string.Empty).Trim();
}
}
else
{
Trace.WriteLine($"SCC.Common.NetHelper.GetUrlResponse执行错误,请求地址:{url},状态码:{response.StatusCode},{response.StatusDescription}.");
return null;
}
}
catch( Exception e)
{
Trace.WriteLine($"SCC.Common.NetHelper.GetUrlResponse发生异常,请求地址:{url},异常信息{e.Message}.");
return null;
}
finally
{
if (responseStream != null)
responseStream.Close();
}
}
#region 部分彩种自有请求网络数据方法
///
/// 请求河南481(泳坛夺金)Url资源
///
/// 目标Url地址
///
public static string GetHeNan481UrlResponse(string url)
{
Stream responseStream = null;
try
{
HttpWebRequest request = HttpWebRequest.Create(url) as HttpWebRequest;
request.Method = "GET";
request.Timeout = 10000;
CookieContainer container = new CookieContainer();
Cookie cookie = new Cookie("JSESSIONID", "76322438526518B500CEB13023461A22", "/", "www.hnlottery.com.cn");
container.Add(cookie);
request.CookieContainer = container;
request.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36";
HttpWebResponse response = request.GetResponse() as HttpWebResponse;
var contentencode = response.ContentEncoding;
if (contentencode == "gzip")
responseStream = new System.IO.Compression.GZipStream(response.GetResponseStream(), System.IO.Compression.CompressionMode.Decompress);
else
responseStream = response.GetResponseStream();
using (StreamReader sr = new StreamReader(responseStream, Encoding.GetEncoding("gb2312")))
{
var content = sr.ReadToEnd();
return content.Replace("\r\n", string.Empty).Trim();
}
}
catch
{
}
finally
{
if (responseStream != null)
responseStream.Close();
}
return null;
}
///
/// 请求湖北11选5Url资源
///
/// 目标Url地址
///
public static string GetHUB11X5UrlResponse(string url)
{
Stream responseStream = null;
try
{
HttpWebRequest request = HttpWebRequest.Create(url) as HttpWebRequest;
request.Method = "GET";
request.Timeout = 10000;
request.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8";
HttpWebResponse response = request.GetResponse() as HttpWebResponse;
var contentencode = response.ContentEncoding;
if (contentencode == "gzip")
responseStream = new System.IO.Compression.GZipStream(response.GetResponseStream(), System.IO.Compression.CompressionMode.Decompress);
else
responseStream = response.GetResponseStream();
using (StreamReader sr = new StreamReader(responseStream, Encoding.UTF8))
{
var content = sr.ReadToEnd();
return content.Replace("\r\n", string.Empty).Trim();
}
}
catch
{
}
finally
{
if (responseStream != null)
responseStream.Close();
}
return null;
}
///
/// 请求山西11选5Url资源
///
/// 目标Url地址
///
public static string GetShanXiTaiYuan11x5UrlResponse(string url)
{
Stream responseStream = null;
try
{
HttpWebRequest request = HttpWebRequest.Create(url) as HttpWebRequest;
request.Method = "GET";
request.Timeout = 10000;
CookieContainer container = new CookieContainer();
Cookie cookie = new Cookie("JSESSIONID", "F76502A5D6582D7286C9CE7656FDAAEF", "/", "www.sxlottery.net");
container.Add(cookie);
request.CookieContainer = container;
request.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36";
HttpWebResponse response = request.GetResponse() as HttpWebResponse;
var contentencode = response.ContentEncoding;
if (contentencode == "gzip")
responseStream = new System.IO.Compression.GZipStream(response.GetResponseStream(), System.IO.Compression.CompressionMode.Decompress);
else
responseStream = response.GetResponseStream();
using (StreamReader sr = new StreamReader(responseStream, Encoding.UTF8))
{
var content = sr.ReadToEnd();
return content.Replace("\r\n", string.Empty).Trim();
}
}
catch
{
}
finally
{
if (responseStream != null)
responseStream.Close();
}
return null;
}
///
/// 请求重庆快乐十分Url资源
///
/// 目标Url地址
/// 页码
///
public static string GetCQKL10FUrlResponse(string url, int pageIndex)
{
Stream responseStream = null;
try
{
HttpWebRequest request = HttpWebRequest.Create(url) as HttpWebRequest;
request.Method = "POST";
request.Timeout = 10000;
CookieContainer container = new CookieContainer();
Cookie cookie = new Cookie("ASP.NET_SessionId", "4e0ri0cjp5pyjkigils0wzvy", "/", "buy.cqcp.net");
container.Add(cookie);
request.CookieContainer = container;
request.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36";
var postdata = "sPass=BEAB95B0BAA1242CF042D1659686F54B&idMode=9&iType=2&iCount=" + pageIndex;
byte[] bs = Encoding.GetEncoding("gb2312").GetBytes(postdata);
request.ContentLength = bs.Length;
request.ContentType = "application/x-www-form-urlencoded";
using (Stream requestStream = request.GetRequestStream())
{
requestStream.Write(bs, 0, bs.Length);
}
HttpWebResponse response = request.GetResponse() as HttpWebResponse;
var contentencode = response.ContentEncoding;
if (contentencode == "gzip")
responseStream = new System.IO.Compression.GZipStream(response.GetResponseStream(), System.IO.Compression.CompressionMode.Decompress);
else
responseStream = response.GetResponseStream();
using (StreamReader sr = new StreamReader(responseStream, Encoding.GetEncoding("gb2312")))
{
var content = sr.ReadToEnd();
return content.Replace("\r\n", string.Empty).Trim();
}
}
catch
{
}
finally
{
if (responseStream != null)
responseStream.Close();
}
return null;
}
///
/// 请求百度彩票Url资源
///
/// 目标Url地址
///
public static string GetBaiDuLeCaiResponse(string url)
{
Stream responseStream = null;
try
{
HttpWebRequest request = HttpWebRequest.Create(url) as HttpWebRequest;
request.Method = "GET";
request.Timeout = 10000;
request.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36";
request.Headers.Add("Accept-Encoding", "gzip, deflate, sdch");
request.Headers.Add("Accept-Language", "zh-CN,zh;q=0.8");
request.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8";
CookieContainer container = new CookieContainer();
Cookie cookie = new Cookie("lehecai_request_control_stats", "2", "/", "baidu.lecai.com");
container.Add(cookie);
cookie = new Cookie("_lcas_uuid", "1886243347", "/", "baidu.lecai.com");
container.Add(cookie);
cookie = new Cookie("_lhc_uuid", "sp_587888388668b5.45001252", "/", "baidu.lecai.com");
container.Add(cookie);
request.CookieContainer = container;
HttpWebResponse response = request.GetResponse() as HttpWebResponse;
var contentencode = response.ContentEncoding;
if (contentencode == "gzip")
responseStream = new System.IO.Compression.GZipStream(response.GetResponseStream(), System.IO.Compression.CompressionMode.Decompress);
else
responseStream = response.GetResponseStream();
using (StreamReader sr = new StreamReader(responseStream, Encoding.GetEncoding("gb2312")))
{
var content = sr.ReadToEnd();
return content.Replace("\r\n", string.Empty).Trim();
}
}
catch
{
}
finally
{
if (responseStream != null)
responseStream.Close();
}
return null;
}
///
/// 请求甘肃11选5Url资源
///
/// 目标Url地址
///
public static string GetGS11X5UrlResponse(string url)
{
Stream responseStream = null;
try
{
HttpWebRequest request = HttpWebRequest.Create(url) as HttpWebRequest;
request.Method = "GET";
request.Timeout = 10000;
request.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36";
request.Headers.Add("Accept-Encoding", "gzip, deflate, sdch");
request.Headers.Add("Accept-Language", "zh-CN,zh;q=0.8");
request.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8";
CookieContainer container = new CookieContainer();
Cookie cookie = new Cookie("sid", "d4cc22d9-9b4c-49d0-8965-61e3fdbe8167", "/", "www.gstc.org.cn");
container.Add(cookie);
request.CookieContainer = container;
HttpWebResponse response = request.GetResponse() as HttpWebResponse;
var contentencode = response.ContentEncoding;
if (contentencode == "gzip")
responseStream = new System.IO.Compression.GZipStream(response.GetResponseStream(), System.IO.Compression.CompressionMode.Decompress);
else
responseStream = response.GetResponseStream();
using (StreamReader sr = new StreamReader(responseStream, Encoding.GetEncoding("gb2312")))
{
var content = sr.ReadToEnd();
return content.Replace("\r\n", string.Empty).Trim();
}
}
catch
{
}
finally
{
if (responseStream != null)
responseStream.Close();
}
return null;
}
///
/// 请求吉林11选5Url资源
///
/// 目标Url地址
/// 传送数据
///
public static string GetJL11X5UrlResponse(string url, string postdata)
{
Stream responseStream = null;
try
{
HttpWebRequest request = HttpWebRequest.Create(url) as HttpWebRequest;
request.Method = "POST";
request.Timeout = 10000;
request.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36";
request.Headers.Add("Accept-Encoding", "gzip, deflate, sdch");
request.Headers.Add("Accept-Language", "zh-CN,zh;q=0.8");
request.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8";
request.Referer = "http://jl.lottery.gov.cn/11x5.aspx";
//CookieContainer container = new CookieContainer();
//Cookie cookie = new Cookie("sid", "d4cc22d9-9b4c-49d0-8965-61e3fdbe8167", "/", "www.gstc.org.cn");
//container.Add(cookie);
//request.CookieContainer = container;
byte[] bs = Encoding.UTF8.GetBytes(postdata);
request.ContentLength = bs.Length;
request.ContentType = "application/x-www-form-urlencoded; charset=UTF-8";
using (Stream requestStream = request.GetRequestStream())
{
requestStream.Write(bs, 0, bs.Length);
}
HttpWebResponse response = request.GetResponse() as HttpWebResponse;
var contentencode = response.ContentEncoding;
if (contentencode == "gzip")
responseStream = new System.IO.Compression.GZipStream(response.GetResponseStream(), System.IO.Compression.CompressionMode.Decompress);
else
responseStream = response.GetResponseStream();
using (StreamReader sr = new StreamReader(responseStream, Encoding.UTF8))
{
var content = sr.ReadToEnd();
return content.Replace("\r\n", string.Empty).Trim();
}
}
catch
{
}
finally
{
if (responseStream != null)
responseStream.Close();
}
return null;
}
///
/// 从彩票控爬取山西快乐十分开奖资源
///
/// 彩票控地址
///
public static string GetShanXiTaiYuanKL10FResource(string url)
{
Stream responseStream = null;
try
{
HttpWebRequest request = HttpWebRequest.Create(url) as HttpWebRequest;
request.Method = "GET";
request.Timeout = 10000;
request.Referer = "https://www.baidu.com/link?url=LlPuYDRBAgub8jzVvo8sugb4Js5-NQDPuKAGXZrc-UNS2AiizIzaKJC0C90Jh0rWEK7qargFxEp2lKxQwx1Vxa&wd=&eqid=abe817410018bc0a0000000557393f77";
request.Host = "www.caipiaokong.com";
request.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8";
request.Headers.Add("Accept-Encoding", "gzip, deflate, sdch");
request.Headers.Add("Accept-Language", "zh-CN,zh;q=0.8");
request.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.87 Safari/537.36";
request.Headers.Add("Cache-Control", "max-age=0");
request.Headers.Add("Upgrade-Insecure-Requests", "1");
request.Headers.Add("Cookie", "BAIDU_SSP_lcr=https://www.baidu.com/link?url=LlPuYDRBAgub8jzVvo8sugb4Js5-NQDPuKAGXZrc-UNS2AiizIzaKJC0C90Jh0rWEK7qargFxEp2lKxQwx1Vxa&wd=&eqid=abe817410018bc0a0000000557393f77; __cfduid=d506c4c6a0c7f88d91869fa379b2cb1421462343508; caipiaokong_4891_saltkey=MsvISvSd; caipiaokong_4891_lastvisit=1462339908; caipiaokong_4891_caipiaokong_eNr=1; caipiaokong_4891_lastact=1463370823%09index.php%09shxklsf; Hm_lvt_1fa650cb7d8eae53d0e6fbd8aec3eb67=1463369580,1463369608,1463369847,1463370211; Hm_lpvt_1fa650cb7d8eae53d0e6fbd8aec3eb67=1463370839");
HttpWebResponse response = request.GetResponse() as HttpWebResponse;
var contentencode = response.ContentEncoding;
if (contentencode == "gzip")
responseStream = new System.IO.Compression.GZipStream(response.GetResponseStream(), System.IO.Compression.CompressionMode.Decompress);
else
responseStream = response.GetResponseStream();
using (StreamReader sr = new StreamReader(responseStream, Encoding.GetEncoding("gb2312")))//.UTF8))
{
var content = sr.ReadToEnd();
return content;
}
}
catch
{
}
finally
{
if (responseStream != null)
responseStream.Close();
}
return string.Empty;
}
#endregion
///
/// 保存网络图片
///
/// 网络图片地址
/// 图片保存文件夹
/// 对应URL访问基础地址
///
public static string SaveNetImage(string ImageUrl, string SavePath, string SaveUrl)
{
return SaveNetImage(ImageUrl, SavePath, SaveUrl, string.Empty);
}
///
/// 保存网络图片
///
/// 网络图片地址
/// 图片保存文件夹
/// 对应URL访问基础地址
/// 固定文件夹名(用于相同类型图片放在一个文件夹中,可空)
///
public static string SaveNetImage(string ImageUrl, string SavePath, string viewUrl, string FixFolderName)
{
try
{
HttpWebRequest request = HttpWebRequest.Create(ImageUrl) as HttpWebRequest;
request.Method = "GET";
request.Timeout = 5000;
request.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.143 Safari/537.36";
request.KeepAlive = true;
request.ProtocolVersion = HttpVersion.Version10;
request.Headers.Add("Cookie", "__cfduid=d53136a7fdcb2c4c64f8ed24a66b32f251476954305");
HttpWebResponse response = request.GetResponse() as HttpWebResponse;
Image img = Image.FromStream(response.GetResponseStream());
var today = DateTime.Now.ToString("yyyyMMdd", DateTimeFormatInfo.InvariantInfo);
var saveFolder = Path.Combine(SavePath, today, FixFolderName);
if (!Directory.Exists(saveFolder))
{
Directory.CreateDirectory(saveFolder);
}
var fileExt = Path.GetExtension(ImageUrl).ToLower();
string[] imgExt = new string[] { ".gif", ".jpg", ".jpeg", ".png", ".bmp" };
if (string.IsNullOrWhiteSpace(fileExt) || Array.IndexOf(imgExt, fileExt) == -1)
fileExt = ".jpg";
var savefile = DateTime.Now.ToString("yyyyMMddHHmmss_ffff", DateTimeFormatInfo.InvariantInfo) + fileExt;
img.Save(Path.Combine(saveFolder, savefile));
return UrlCombine(viewUrl, today, FixFolderName, savefile);
}
catch
{
}
return string.Empty;
}
///
/// URL路径拼写
///
/// 路径参数列表
///
public static string UrlCombine(params string[] paths)
{
if (paths == null || paths.Length == 0)
{
throw new ArgumentNullException("paths");
}
StringBuilder sb = new StringBuilder();
string item = string.Empty;
for (int i = 0; i < paths.Length; i++)
{
item = paths[i];
if (item == null)
{
throw new ArgumentNullException("paths");
}
if (item.Length != 0)
{
if (item.StartsWith("/"))
item = item.Substring(1);
if (item.IndexOf(".") != -1)
{
sb.Append(item);
}
else if (item.EndsWith("/"))
sb.Append(item);
else
sb.Append(item + "/");
}
}
return sb.ToString();
}
}
}