您的位置:首页 > 理论基础 > 计算机网络

C# HTTP网络常用方法封装

2014-06-07 14:01 363 查看
http://blog.csdn.net/rrrfff/article/details/7211410



[csharp] view
plaincopyprint?

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

namespace Register

{

public class HttpClass

{

private System.Net.HttpWebRequest Request = null;

private System.Net.WebResponse Response = null;

private System.IO.Stream Stream = null;

private System.IO.StreamReader Read = null;

private System.Byte[] Byte = null;

private System.Text.Encoding Encode = System.Text.Encoding.UTF8;

private System.Text.RegularExpressions.Match Match = null;

/// <summary>

/// 公开属性

/// </summary>

public System.Net.WebProxy Proxy = new System.Net.WebProxy()

public string IPFor = null;

public bool HideInfo = false;

/// <summary>

/// 初始化Request

/// </summary>

/// <param name="Request">对象</param>

private void init_Request(ref System.Net.HttpWebRequest Request)

{

//终端信息

Request.Accept = "text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,image/png,application/java-archive,application/java,application/x-java-archive,text/vnd.sun.j2me.app-descriptor,application/vnd.oma.drm.message,application/vnd.oma.drm.content,application/vnd.oma.dd+xml,application/vnd.oma.drm.rights+xml,application/vnd.oma.drm.rights+wbxml,application/x-nokia-widget,text/x-opml,application/vnd.nokia.headwrapper,*/*;q=0.5";

Request.Headers.Add("Accept-Charset", "iso-8859-1,utf-8;q=0.7,*;q=0.7");

Request.Headers.Add("Accept-Language", "zh-cn, zh;q=1.0,en;q=0.5,en;q=0.5,en;q=0.5");

Request.Headers.Add("Accept-Encoding", "gzip, deflate, x-gzip, identity; q=0.9");

Request.Headers.Add("X-Nokia-MusicShop-Version", "11.0842.9");

//承载方式

Request.Headers.Add("X-Nokia-MusicShop-Bearer", "GPRS/3G");

Request.Headers.Add("X-Nokia-CONNECTION_MODE", "TCP");

Request.Headers.Add("X-Nokia-BEARER", "3G");

Request.Headers.Add("x-up-bear-type", "GPRS/EDGE");

Request.Headers.Add("X-Up-Bearer-Type", "GPRS");

//GGSN信息

Request.Headers.Add("x-source-id", "GZGGSN1101BEr");

Request.Headers.Add("Client-IP", "211.139.151.74");

if (IPFor != null) Request.Headers.Add("x-forwarded-for", IPFor);

//网关信息

Request.Headers.Add("Via", "WTP/1.1 192.168.13.33 (Nokia WAP Gateway 4.1/CD1/ECD13_E/4.1.05)");

Request.Headers.Add("X-Nokia-gateway-id", "NWG/4.1/Build4.1.05");

//目标主机

Request.Headers.Add("X-Online-Host", Request.Host);

//重要信息

if (!HideInfo)

{

Request.UserAgent = "Mozilla/5.0 (SymbianOS/9.4; U; Series60/5.0 Nokia5230/10.0.055; Profile/MIDP-2.1 Configuration/CLDC-1.1 ) AppleWebKit/413 (KHTML, like Gecko) Safari/413";

Request.Headers.Add("x-wap-profile", "http://nds1.nds.nokia.com/uaprof/Nokia5230r100-3G.xml")

if (IPFor != null)

{

Request.Headers.Add("x-nokia-ipaddress", IPFor);

}

}

//自动重定向

Request.AllowAutoRedirect = false;

//代理设置

if (Proxy.Address != null)

{

Request.Proxy = Proxy;

}

//其它杂项

Request.KeepAlive = false;

Request.Timeout = 8000;

}

// public void GZipDecompress(ref System.IO.Stream refStream)

// {

// using (System.IO.MemoryStream stream = new System.IO.MemoryStream())

// {

// using (System.IO.Compression.GZipStream gZip = new System.IO.Compression.GZipStream(refStream, System.IO.Compression.CompressionMode.Decompress, true))

// {

// System.IO.BinaryReader reader = new System.IO.BinaryReader(gZip);

// System.IO.BinaryWriter writer = new System.IO.BinaryWriter(stream);

// while (true)

// {

// char[] p = reader.ReadChars(32);

// byte[] buffer = reader.ReadBytes(32);

// if (buffer == null || buffer.Length < 1) break;

// writer.Write(buffer);

// }

// writer.Close();

// gZip.CopyTo(stream);

// }

// stream.CopyTo(refStream);

// }

// }

/// <summary>

/// 获取网页数据

/// </summary>

/// <param name="url">请求地址</param>

/// <returns>失败返回null</returns>

public string get_Internet(string url, string cookie = null)

{

try

{

Request = (System.Net.HttpWebRequest)System.Net.HttpWebRequest.Create(url);

url = null;

if (Request != null)

{

init_Request(ref Request);

if (cookie != null) { Request.Headers.Add("Cookie", cookie); }

using (Response = Request.GetResponse())

{

Stream = Response.GetResponseStream();

using (Read = new System.IO.StreamReader(Stream, System.Text.Encoding.UTF8))

{

url = Read.ReadToEnd();

}

Read = null;

Stream = null;

}

Response = null;

Request.Abort();

Request = null;

}

return url;

}

catch(Exception ex)

{

Error.Write(ref ex);

return null;

}

}

/// <summary>

/// 获取数据流

/// </summary>

/// <param name="url">地址</param>

/// <param name="Stream">返回数据流</param>

/// <returns>失败为false</returns>

public bool get_Stream(string url, ref System.IO.MemoryStream Stream, ref string cookie)

{

try

{

Request = (System.Net.HttpWebRequest)System.Net.HttpWebRequest.Create(url);

init_Request(ref Request);

if (cookie != null) { Request.Headers.Add("Cookie", cookie); }

using (Response = Request.GetResponse())

{

Response.GetResponseStream().CopyTo(Stream);

if (cookie != null)

{

cookie += " " + get_Match(Response.Headers.Get("Set-Cookie"), "verifysession=([^;]+);").Replace(";", "");

}

}

Response = null;

}

catch (Exception ex)

{

Error.Write(ref ex);

return false;

}

if (Request != null)

{

Request.Abort();

Request = null;

}

return true;

}

/// <summary>

/// 提交数据并获取返回数据

/// </summary>

/// <param name="url">请求地址</param>

/// <returns>失败返回null</returns>

public string post_Internet(string url, string data, string cookie = null)

{

try

{

Request = (System.Net.HttpWebRequest)System.Net.HttpWebRequest.Create(url);

url = null;

if (Request != null)

{

init_Request(ref Request);

if (cookie != null) { Request.Headers.Add("Cookie", cookie); }

Request.Method = "POST";

Request.ServicePoint.Expect100Continue = false;

Request.ContentType = "application/x-www-form-urlencoded; charset=utf-8";

Byte = Encode.GetBytes(data);

Request.ContentLength = Byte.Length;

using (Stream = Request.GetRequestStream())

{

Stream.Write(Byte, 0, Byte.Length);

}

Stream = null;

Byte = null;

data = null;

using (Response = Request.GetResponse())

{

Stream = Response.GetResponseStream();

using (Read = new System.IO.StreamReader(Stream))

{

url = Read.ReadToEnd();

}

Read = null;

Stream = null;

}

Response = null;

Request.Abort();

Request = null;

}

return url;

}

catch (Exception ex)

{

Error.Write(ref ex);

return null;

}

}

/// <summary>

/// 获取服务器响应报文信息

/// </summary>

/// <param name="url">请求地址</param>

/// <returns>HTTP响应报文</returns>

public string get_All(string url, string cookie = null)

{

try

{

Request = (System.Net.HttpWebRequest)System.Net.HttpWebRequest.Create(url);

url = null;

if (Request != null)

{

Request.Method = "GET";

init_Request(ref Request);

if (cookie != null) { Request.Headers.Add("Cookie", cookie); }

using (Response = Request.GetResponse())

{

foreach (string name in Response.Headers.AllKeys)

{

url += name + "=" + Response.Headers.Get(name) + "; ";

}

Stream = Response.GetResponseStream();

using (Read = new System.IO.StreamReader(Stream, System.Text.Encoding.UTF8))

{

url += Read.ReadToEnd();

}

Read = null;

Stream = null;

}

Response = null;

Request.Abort();

Request = null;

}

return url;

}

catch (Exception ex)

{

Error.Write(ref ex);

return null;

}

}

/// <summary>

/// 获取服务器返回信息

/// </summary>

/// <param name="url">请求地址</param>

/// <returns>HTTP Header</returns>

public string get_Header(string url, string key = "Set-Cookie", string cookie = null)

{

try

{

Request = (System.Net.HttpWebRequest)System.Net.HttpWebRequest.Create(url);

url = null;

if (Request != null)

{

Request.Method = "HEAD";

init_Request(ref Request);

if (cookie != null) { Request.Headers.Add("Cookie", cookie); }

using (Response = Request.GetResponse())

{

url = Response.Headers.Get(key);

}

Response = null;

Request.Abort();

Request = null;

}

return url;

}

catch (Exception ex)

{

Error.Write(ref ex);

return null;

}

}

/// <summary>

/// 获取匹配信息

/// </summary>

/// <param name="src">匹配内容</param>

/// <returns>正则表达式</returns>

public string get_Match(string src, string pattern, string substr = null)

{

Match = System.Text.RegularExpressions.Regex.Match(src, pattern);

if (!Match.Success)

{

return null;

}

if (substr != null)

{

return Match.Groups[substr].Value;

}

return Match.Value;

}

/// <summary>

/// 发送邮件

/// </summary>

/// <param name="ToAddress"></param>

/// <param name="Subject"></param>

/// <param name="Value"></param>

/// <param name="PathArray"></param>

/// <returns></returns>

public static bool try_Email(string ToAddress, string Subject, string Value, string[] PathArray = null)

{

bool result = false;

System.Net.Mail.SmtpClient Mail = new System.Net.Mail.SmtpClient("smtp.qq.com", 25);

Mail.UseDefaultCredentials = true;

Mail.Credentials = new System.Net.NetworkCredential("feedback01", "z123456");

Mail.DeliveryMethod = System.Net.Mail.SmtpDeliveryMethod.Network;

System.Net.Mail.MailMessage Messages = new System.Net.Mail.MailMessage(new System.Net.Mail.MailAddress("feedback01@qq.com"), new System.Net.Mail.MailAddress(ToAddress));

Messages.BodyEncoding = System.Text.Encoding.UTF8;

Messages.SubjectEncoding = System.Text.Encoding.UTF8;

Messages.Subject = Subject;

Messages.Body = Value;

System.Net.Mail.Attachment[] Attachments = null;

try

{

if (PathArray != null)

{

Attachments = new System.Net.Mail.Attachment[PathArray.Length];

for (int i = 0; i < PathArray.Length; i++)

{

if (PathArray[i].Length >= 6 && System.IO.File.Exists(PathArray[i]))

{

Attachments[i] = new System.Net.Mail.Attachment(PathArray[i]);

Messages.Attachments.Add(Attachments[i]);

}

}

}

Mail.Send(Messages);

result = true;

}

catch(Exception ex)

{

Error.Write(ref ex);

result = false;

}

if (Attachments != null)

{

for (int k = 0; k < Attachments.Length; k++)

{

if (Attachments[k] != null)

{

Attachments[k].Dispose();

}

}

}

Messages.Dispose();

Mail.Dispose();

return result;

}

/// <summary>

/// 用于ShellExecuteEx

/// </summary>

[System.Runtime.InteropServices.StructLayout(System.Runtime.InteropServices.LayoutKind.Sequential)]

public struct SHELLEXECUTEINFO

{

public int cbSize;

public int fMask;

public int hwnd;

[System.Runtime.InteropServices.MarshalAs(System.Runtime.InteropServices.UnmanagedType.LPWStr)]

public string lpVerb;

[System.Runtime.InteropServices.MarshalAs(System.Runtime.InteropServices.UnmanagedType.LPWStr)]

public string lpFile;

[System.Runtime.InteropServices.MarshalAs(System.Runtime.InteropServices.UnmanagedType.LPWStr)]

public string lpParameters;

public int lpDirectory;

public int nShow;

public int hInstApp;

public int lpIDList;

public int lpClass;

public int hkeyClass;

public int dwHotKey;

public int hIcon;

public int hProcess;

}

/// <summary>

/// ShellExecuteEx

/// </summary>

/// <param name="lpExecInfo"></param>

/// <returns></returns>

[System.Runtime.InteropServices.DllImport("Shell32.dll", CharSet = System.Runtime.InteropServices.CharSet.Auto, SetLastError = true)]

public static extern bool ShellExecuteEx(ref SHELLEXECUTEINFO lpExecInfo);

static SHELLEXECUTEINFO ShellInfo;

/// <summary>

/// 打开URL

/// </summary>

/// <param name="url"></param>

public static void OpenURL(string url)

{

if (ShellInfo.lpFile == null)

{

Microsoft.Win32.RegistryKey SubKey = Microsoft.Win32.Registry.ClassesRoot.OpenSubKey(@"HTTP\shell\open\command");

if (SubKey == null)

{

return;

}

string Explorer = ((string)SubKey.GetValue(null)).Replace("\"", "");

int SpaceOffset = -1;

if ((SpaceOffset = Explorer.LastIndexOf(" ")) != -1)

{

Explorer = Explorer.Substring(0, SpaceOffset);

}

ShellInfo.cbSize = System.Runtime.InteropServices.Marshal.SizeOf(ShellInfo);

ShellInfo.lpFile = Explorer;

ShellInfo.nShow = 1; //SW_SHOWNORMAL

SubKey.Close();

SubKey.Dispose();

}

ShellInfo.lpParameters = url;

ShellExecuteEx(ref ShellInfo);

}

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: