博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
socket,获取html,webservice等,支持chunked,gzip,deflate
阅读量:5124 次
发布时间:2019-06-13

本文共 6683 字,大约阅读时间需要 22 分钟。

1. [代码][C#]代码
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)
            {
http://www.huiyi8.com/hunsha/lifu/
                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("连接不上服务器");

转载于:https://www.cnblogs.com/xkzy/p/3944985.html

你可能感兴趣的文章
Red and Black(poj-1979)
查看>>
分布式锁的思路以及实现分析
查看>>
腾讯元对象存储之文件删除
查看>>
jdk环境变量配置
查看>>
安装 Express
查看>>
包含列的索引:SQL Server索引的阶梯级别5
查看>>
myeclipse插件安装
查看>>
浙江省第十二届省赛 Beauty of Array(思维题)
查看>>
NOIP2013 提高组 Day1
查看>>
cocos2dx 3.x simpleAudioEngine 长音效被众多短音效打断问题
查看>>
存储(硬件方面的一些基本术语)
查看>>
观察者模式
查看>>
Weka中数据挖掘与机器学习系列之基本概念(三)
查看>>
Win磁盘MBR转换为GUID
查看>>
大家在做.NET B/S项目的时候多用什么设技术啊?
查看>>
Java SE和Java EE应用的性能调优
查看>>
Android设计模式系列--原型模式
查看>>
免费的论文查重网站
查看>>
C语言程序第一次作业
查看>>
leetcode-Sort List
查看>>