代码语言
.
CSharp
.
JS
Java
Asp.Net
C
MSSQL
PHP
Css
PLSQL
Python
Shell
EBS
ASP
Perl
ObjC
VB.Net
VBS
MYSQL
GO
Delphi
AS
DB2
Domino
Rails
ActionScript
Scala
代码分类
文件
系统
字符串
数据库
网络相关
图形/GUI
多媒体
算法
游戏
Jquery
Extjs
Android
HTML5
菜单
网页交互
WinForm
控件
企业应用
安全与加密
脚本/批处理
开放平台
其它
【
CSharp
】
socket,获取html,webservice等,支持chunked,gzip,d
作者:
王小色
/ 发布于
2012/11/13
/
622
socket,获取html,webservice等,支持chunked,gzip,deflate
using System; using System.Collections.Generic; using System.Linq; using System.Net.Sockets; using System.Text; using System.Net; using System.IO; using System.IO.Compression; using System.Reflection; namespace ConsoleApplication1 { internal class user { public string content { get; set; } public string mdpass { get; set; } public string mobile { get; set; } public string name { get; set; } public string pass { get; set; } public string ptimestamp { get; set; } public string sendPort { get; set; } public string sendTime { get; set; } public string title { get; set; } } class Program { static void Main(string[] args) { Console.WriteLine("********WebService Testing!*******"); HttpHelper http = new HttpHelper(); Dictionary<string, string> dics = new Dictionary<string, string>(); user bean = new user(); bean.name = "122"; bean.pass = "21"; bean.ptimestamp = "20121109111950"; bean.content = "测试"; bean.mobile = "13432033335"; bean.sendPort = ""; bean.sendTime = ""; bean.mdpass = "4CC4122226B23F75EDE78"; http.NameSpace = "http://*.*.*.*:8080//sms"; http.WEncoding = Encoding.UTF8; Console.WriteLine(http.GetWebServiceStr("http://124.****:8080//sms", "SendSMS", http.CreateSoap(bean))); Console.WriteLine("*********Get Testing!***********"); http.WEncoding = Encoding.UTF8; http.IniStalling(); Console.WriteLine(http.MethodGetHttpStr("http://*.*.*.*:8080/smshttp?")); Console.WriteLine("*********Post Testing!**********"); http.WEncoding = Encoding.UTF8; http.IniStalling(); Console.WriteLine(http.MethodPostHttpStr("http://*.*.*.*:8080/smshttp?act=getbalance", "")); Console.ReadLine(); } } /// <summary> /// socket核心 /// </summary> internal class HttpHelper { public HttpHelper() { IniStalling(); } public void IniStalling() { HttpHeaders = new List<HttpHeaderModel>(); ResponseHttpHeaders = new List<HttpHeaderModel>(); DicCookies = new List<CookiesModel>(); AddHttpHeader("Accept", "*/*"); AddHttpHeader("Accept-Language", "zh-CN"); AddHttpHeader("User-Agent", "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)"); AddHttpHeader("UA-CPU", "AMD64"); AddHttpHeader("Connection", "Keep-Alive"); } public Encoding WEncoding = Encoding.UTF8; /// <summary> /// 请求或者返回的头文件 /// </summary> internal class HttpHeaderModel { public string Key { get; set; } public string Value { get; set; } } /// <summary> /// get,post的cookies /// </summary> internal class CookiesModel { public string Key { get; set; } public string Value { get; set; } public string Domain { get; set; } } internal List<HttpHeaderModel> HttpHeaders = new List<HttpHeaderModel>(); internal List<HttpHeaderModel> ResponseHttpHeaders = new List<HttpHeaderModel>(); internal List<CookiesModel> DicCookies = new List<CookiesModel>(); /// <summary> /// 添加HTTP头 /// </summary> /// <param name="key"></param> /// <param name="value"></param> public void AddHttpHeader(string key, string value) { foreach (HttpHeaderModel httpHeaderModel in HttpHeaders) { if (httpHeaderModel.Key == key) { httpHeaderModel.Value = value; return; } } HttpHeaders.Add(new HttpHeaderModel() { Key = key, Value = value }); } public string MethodGetHttpStr(string url) { return GetHttpByte(url, null); } public string MethodPostHttpStr(string url, string data) { return GetHttpByte(url, data); } /// <summary> /// 设置命名空间,请在地址后面加上wsdl获取。 /// </summary> public string NameSpace { get; set; } private int index = 0; public string CreateSoap(object obj) { StringBuilder sb = new StringBuilder(); Type tType = obj.GetType(); PropertyInfo[] pInfos = tType.GetProperties(); sb.AppendLine("<test" + index + " xsi:type=\"m" + index + ":" + tType.Name + "\">"); foreach (PropertyInfo pInfo in pInfos) { sb.AppendLine(string.Format(" <{0}>{1}</{0}>", pInfo.Name, pInfo.GetValue(obj, null))); } sb.AppendLine("</test" + index + ">"); index++; return sb.ToString(); } public string CreateSoap(Dictionary<string, string> MethodParms) { StringBuilder sb = new StringBuilder(); foreach (KeyValuePair<string, string> keyValuePair in MethodParms) { sb.AppendLine(string.Format(" <{0}>{1}</{0}>", keyValuePair.Key, keyValuePair.Value)); } return sb.ToString(); } public string GetWebServiceStr(string url, string MethodName, string soap) { index = 0; if (string.IsNullOrEmpty(NameSpace)) throw new MissingFieldException("请输入NameSpace"); if (url.Contains("asmx")) AddHttpHeader("SOAPAction", "\"" + NameSpace.TrimEnd('/') + "/" + MethodName + "\""); else AddHttpHeader("SOAPAction", "\"\""); AddHttpHeader("Content-Type", "text/xml; charset=utf-8"); StringBuilder sb = new StringBuilder(); sb.AppendLine("<?xml version=\"1.0\" encoding=\"utf-8\"?>"); sb.AppendLine("<soap:Envelope xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\">"); sb.AppendLine("<soap:Body>"); sb.AppendLine(string.Format("<" + MethodName + " xmlns=\"" + NameSpace + "\">")); sb.Append(soap); sb.AppendLine(string.Format("</" + MethodName + ">")); sb.AppendLine("</soap:Body>"); sb.AppendLine("</soap:Envelope>"); return MethodPostHttpStr(url, sb.ToString()); } public string GetHttpByte(string url, string data = "") { bool methodPost = !string.IsNullOrEmpty(data); if (methodPost) { byte[] sendBytes = WEncoding.GetBytes(data); AddHttpHeader("Content-Length", sendBytes.Length.ToString()); } string cookies = DicCookies.Aggregate(string.Empty, (current, cookie) => current + string.Format("{0}:{1};", cookie.Key, cookie.Value)); string[] urlspils = url.Replace("http://", "").Split('/'); string host = urlspils[0]; string methodurl = url.Replace("http://", "").Remove(0, host.Length); string[] ipport = host.Split(':'); string ip = "127.0.0.1"; string post = "80"; if (ipport.Length > 1) { host = ipport[0]; post = ipport[1]; } IPAddress[] addressList = Dns.GetHostAddresses(host); if (addressList.Length > 0) { ip = addressList[0].ToString(); } Socket httpSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); IPEndPoint serverHost = new IPEndPoint(IPAddress.Parse(ip), int.Parse(post)); StringBuilder httpHeader = new StringBuilder(); httpHeader.Append((methodPost ? "POST" : "GET") + " " + methodurl + " HTTP/1.1\r\n"); AddHttpHeader("Host", host); if (!string.IsNullOrEmpty(cookies)) AddHttpHeader("Cookie", cookies); foreach (var item in HttpHeaders) { httpHeader.Append(string.Format("{0}: {1}\r\n", item.Key, item.Value)); } string httpData = string.Format("{0}\r\n{1}", httpHeader, data); Console.WriteLine(httpData); try { httpSocket.Connect(serverHost); if (!httpSocket.Connected) throw new WebException("连接不上服务器"); byte[] bytesSend = WEncoding.GetBytes(httpData); #region Socket //httpSocket.Send(bytesSend); //byte[] bytesReceive = new byte[8192]; //string getresult = string.Empty; //while (true) //{ // int receiveLen = httpSocket.Receive(bytesReceive, bytesReceive.Length, SocketFlags.None); // getresult += WEncoding.GetString(bytesReceive, 0, receiveLen); // if ((receiveLen) == 0 || receiveLen < bytesReceive.Length) // break; // Thread.Sleep(10); //} //return getresult; #endregion #region networkstrem using (var stream = new NetworkStream(httpSocket)) { stream.Write(bytesSend, 0, bytesSend.Length); while (true) { var line = ReadLine(stream); if (line.Length == 0) break; if (line.Contains("HTTP/1.1")) continue; int index = line.IndexOf(':'); ResponseHttpHeaders.Add(new HttpHeaderModel() { Key = line.Substring(0, index), Value = line.Substring(index + 2) }); } Stream responseStream = stream; bool ischunked = GetFromResponseHeader("Transfer-Encoding").Count == 1; List<string> conlengt = GetFromResponseHeader("Content-Length"); long contentlenght = 0; if (conlengt.Count > 0) contentlenght = long.Parse(conlengt[0]); List<string> contentEncodings = GetFromResponseHeader("Content-Encoding"); if (contentEncodings.Count == 1) { if (contentEncodings[0].Equals("gzip")) { responseStream = new GZipStream(responseStream, CompressionMode.Decompress); } else if (contentEncodings[0].Equals("deflate")) { responseStream = new DeflateStream(responseStream, CompressionMode.Decompress); } } if (ischunked) { StringBuilder sbReadstr = new StringBuilder(); // var respBuffer = new byte[contentlenght + 1024]; int readlinecount = 1; while (true) { var line = ReadLine(responseStream); int lenght = 0; if (readlinecount % 2 == 0) { sbReadstr.AppendLine(line); } else if (line.Length == 1 && int.TryParse(line, out lenght) && readlinecount % 2 == 1 && readlinecount != 1) { if (lenght == 0) break; } readlinecount++; } //var strbytes = WEncoding.GetBytes(sbReadstr.ToString()); //memStream.Write(strbytes, 0, strbytes.Length); return sbReadstr.ToString(); } else { var respBuffer = new byte[contentlenght + 1024]; try { int bytesRead = responseStream.Read(respBuffer, 0, respBuffer.Length); { return WEncoding.GetString(respBuffer, 0, bytesRead); } } finally { responseStream.Close(); } } } #endregion } catch (Exception ex) { throw ex; } finally { if (httpSocket.Connected) httpSocket.Close(); } } public List<string> GetFromResponseHeader(string key) { return (from item in ResponseHttpHeaders where item.Key == key select item.Value).ToList(); } string ReadLine(Stream stream) { var lineBuffer = new List<byte>(); while (true) { int b = stream.ReadByte(); if (b == -1) { return null; } if (b == 10) { break; } if (b != 13) { lineBuffer.Add((byte)b); } } return WEncoding.GetString(lineBuffer.ToArray()); } } internal class httpNetHelper { public string CreateGetString(string geturl) { return GetHtml(geturl); } public string CreatePostString(string posturl, string date) { return GetHtml(posturl, Encoding.UTF8.GetBytes(date)); } private String userAgent = "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; .NET CLR 1.1.4322; .NET4.0C; .NET4.0E)"; private String accept = "*/*"; public String contentType = "application/x-www-form-urlencoded; charset=UTF-8"; /// <summary> /// 从响应获得字符串 /// </summary> /// <param name="url"></param> /// <param name="data"></param> /// <returns></returns> internal string GetHtml(string url, byte[] data = null) { using (var response = GetResponse(url, data)) { using (var stream = response.GetResponseStream()) { using (var sr = new StreamReader(stream, Encoding.UTF8)) { return sr.ReadToEnd(); } } } } internal HttpWebResponse GetResponse(string url, byte[] data = null) { HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); request.ContentType = "application/x-www-form-urlencoded; charset=UTF-8"; request.UserAgent = userAgent; request.Accept = accept; if (data != null) { request.Method = "POST"; request.ContentLength = data.Length; using (var stream = request.GetRequestStream()) { stream.Write(data, 0, data.Length); } } else { request.Method = "GET"; } request.Timeout = 5000; return (HttpWebResponse)request.GetResponse(); } } }
试试其它关键字
socket
html
webservice
同语言下
.
文件IO 操作类库
.
Check图片类型[JPEG(.jpg 、.jpeg),TIF,GIF,BMP,PNG,P
.
机器名和IP取得(IPV4 IPV6)
.
Tiff转换Bitmap
.
linqHelper
.
MadieHelper.cs
.
RegHelper.cs
.
如果关闭一个窗体后激活另一个窗体的事件或方法
.
创建日志通用类
.
串口辅助开发类
可能有用的
.
C#实现的html内容截取
.
List 切割成几份 工具类
.
SQL查询 多列合并成一行用逗号隔开
.
一行一行读取txt的内容
.
C#动态修改文件夹名称(FSO实现,不移动文件)
.
c# 移动文件或文件夹
.
c#图片添加水印
.
Java PDF转换成图片并输出给前台展示
.
网站后台修改图片尺寸代码
.
处理大图片在缩略图时的展示
王小色
贡献的其它代码
(
1
)
.
socket,获取html,webservice等,支持chunked,gzip,d
Copyright © 2004 - 2024 dezai.cn. All Rights Reserved
站长博客
粤ICP备13059550号-3