using System;
using System.Collections.Generic;
using System.Drawing;
using System.IO;
using System.Net;
using System.Reflection;
using System.Text;
using System.Text.RegularExpressions;

namespace DotNet.Utilities
{
    /// <summary>
    /// COM对象的后期绑定调用类库
    /// </summary>
    public class ComObject
    {
        private System.Type _ObjType;
        private object ComInstance;

        public ComObject(string ComName)
        {
            //根据COM对象的名称创建COM对象
            _ObjType = System.Type.GetTypeFromProgID(ComName);
            if (_ObjType == null)
                throw new Exception("指定的COM对象名称无效");
            ComInstance = System.Activator.CreateInstance(_ObjType);
        }

        public System.Type ComType
        {
            get { return _ObjType; }
        }

        //执行的函数
        public object DoMethod(string MethodName, object[] args)
        {
            return ComType.InvokeMember(MethodName, System.Reflection.BindingFlags.InvokeMethod, null, ComInstance, args);
        }

        public object DoMethod(string MethodName, object[] args, System.Reflection.ParameterModifier[] ParamMods)
        {
            return ComType.InvokeMember(MethodName, System.Reflection.BindingFlags.InvokeMethod, null, ComInstance, args, ParamMods, null, null);
        }
        //获得属性与设置属性
        public object this[string propName]
        {
            get
            {
                return _ObjType.InvokeMember(propName, System.Reflection.BindingFlags.GetProperty, null, ComInstance, null);
            }
            set
            {
                _ObjType.InvokeMember(propName, System.Reflection.BindingFlags.SetProperty, null, ComInstance, new object[] { value });
            }
        }
    }

    /// <summary>
    /// WinHttp对象库
    /// </summary>
    public class WinHttp
    {

        private ComObject HttpObj;

        private bool Auto = false;
        private bool IsAccept = false;
        private bool IsPOST = false;
        private bool IsAcceptLanguage = false;
        private bool IsReferer = false;
        private bool IsUserAgent = false;
        private bool IsContentType = false;
        private string Accept = string.Empty;
        private string AcceptLanguage = string.Empty;
        private string UserAgent = string.Empty;
        private string ContentType = string.Empty;
        private string Referer = string.Empty;
        private string hHttp = string.Empty;
        /// <summary>
        /// 构造函数,初始化
        /// </summary>
        public WinHttp()
        {
            CreatObj();
            DefaultHeader();
        }
        /// <summary>
        /// 默认协议头
        /// </summary>
        private void DefaultHeader()
        {
            Auto = true;
            Accept = "text/html, application/xhtml+xml, */*";
            AcceptLanguage = "zh-cn";
            UserAgent = "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0)";
            ContentType = "application/x-www-form-urlencoded";
        }
        /// <summary>
        /// 自动补全模式
        /// </summary>
        public void AutoCompletionMode(bool Auto_ = true)
        {
            Auto = Auto_;
        }
        /// <summary>
        /// 创建对象
        /// </summary>
        public bool CreatObj()
        {
            if (ObjExists() == false)
            {
                return true;
            }
            HttpObj = new ComObject("WinHttp.WinHttpRequest.5.1");
            return HttpObj != null;
        }
        /// <summary>
        /// 销毁
        /// </summary>
        public void DisposeObj()
        {
            HttpObj = null;
        }
        /// <summary>
        /// 对象是否存在
        /// </summary>
        /// <returns></returns>
        public bool ObjExists()
        {
            return HttpObj == null;
        }
        /// <summary>
        /// 取得对象
        /// </summary>
        /// <returns></returns>
        public object GetObj()
        {
            return HttpObj;
        }
        /// <summary>
        /// 继承对象
        /// </summary>
        /// <param name="com"></param>
        public void inheritObj(ComObject com)
        {
            HttpObj = null;
            HttpObj = com;
        }
        /// <summary>
        /// 重置
        /// </summary>
        public void ResetObj()
        {
            HttpObj = null;
            CreatObj();
        }
        /// <summary>
        /// 取状态
        /// </summary>
        public int GetState()
        {
            return Convert.ToInt32(HttpObj.DoMethod("Status", new object[] { }));
        }
        /// <summary>
        /// 取状态文本
        /// </summary>
        /// <returns></returns>
        public string GetStateText()
        {
            return HttpObj.DoMethod("StatusText", new object[] { }).ToString();
        }
        /// <summary>
        /// 取返回byte
        /// </summary>
        /// <returns></returns>
        public byte[] GetResponseBody()
        {
            object obj;
            obj = HttpObj.DoMethod("ResponseBody", new object[] { });
            return (byte[])obj;

        }
        /// <summary>
        /// 取返回文本Ex
        /// </summary>
        /// <returns></returns>
        public string GetResponseBody_Ex()
        {
            object obj;
            obj = HttpObj.DoMethod("ResponseText", new object[] { });
            return obj.ToString();

        }
        /// <summary>
        /// 取返回字符串GB2312
        /// </summary>
        /// <returns></returns>
        public string GetResponseBody_GB2312()
        {
            ComObject AdoStream = new ComObject("Adodb.Stream");
            AdoStream[;
            AdoStream[;
            AdoStream.DoMethod("Open", new object[] { });
            AdoStream.DoMethod(] { HttpObj["ResponseBody"] });
            AdoStream[;
            AdoStream[;
            AdoStream["Charset"] = "GB2312"; //utf-8

            return AdoStream["ReadText"].ToString();
            //创建 Adodb.Stream对象 二进制数据流或文本流

        }
        /// <summary>
        /// 取返回字符串utf-8
        /// </summary>
        /// <returns></returns>
        public string GetResponseBody_utf8()
        {
            ComObject AdoStream = new ComObject("Adodb.Stream");
            AdoStream[;
            AdoStream[;
            AdoStream.DoMethod("Open", new object[] { });
            AdoStream.DoMethod(] { HttpObj["ResponseBody"] });
            AdoStream[;
            AdoStream[;
            AdoStream["Charset"] = "utf-8"; //utf-8
            return AdoStream["ReadText"].ToString();
            //创建 Adodb.Stream对象 二进制数据流或文本流

        }
        /// <summary>
        /// 取返回数据流
        /// </summary>
        /// <returns></returns>
        public object GetResponseBody_Stream()
        {
            object obj;
            obj = HttpObj.DoMethod("ResponseStream", new object[] { });
            return obj;
        }
        /// <summary>
        /// 设置等待超时等
        /// </summary>
        /// <param name="ResolveTimeout">解析超时</param>
        /// <param name="ConnectTimeout">连接超时</param>
        /// <param name="SendTimeout">发送超时</param>
        /// <param name="ReceiveTimeout">接收超时</param>
        /// <returns></returns>

        , , )
        {
            ) ConnectTimeout = ResolveTimeout;
            ) SendTimeout = ResolveTimeout;
            ) ReceiveTimeout = ResolveTimeout;
            object obj;
            obj = HttpObj.DoMethod(] { ResolveTimeout, ConnectTimeout, SendTimeout, ReceiveTimeout });
        }
        /// <summary>
        /// 设置代理
        /// </summary>
        /// <param name="proxySetting">默认为 2 可空</param>
        /// <param name="proxyServer">例:192.68.1.1:8080</param>
        /// <param name="bypassList">127.0.0.1 可空</param>
        , string bypassList = "")
        {
            HttpObj.DoMethod("SetProxy", new object[] { proxySetting, proxyServer, bypassList });
        }
        /// <summary>
        /// 重定向
        /// </summary>
        /// <param name="allow">允许</param>
        public void SetOption(bool allow)
        {
            HttpObj.DoMethod(, allow });
            //this.DoMethod("put_Option", new object[] { 6, false });
        }
        /// <summary>
        /// 设置凭证
        /// </summary>
        /// <param name="name"></param>
        /// <param name="pwd"></param>
        /// <param name="Flags"></param>
        )
        {
            HttpObj.DoMethod("SetCredentials", new object[] { name, pwd, Flags });
        }
        /// <summary>
        /// 设置客户端证书 ,指定一个客户端证书
        /// </summary>
        /// <param name="Certificate">证书</param>
        public void SetClientCertificate(string Certificate)
        {
            HttpObj.DoMethod("SetClientCertificate", new object[] { Certificate });
        }
        /// <summary>
        /// 设置自动登录策略
        /// </summary>
        /// <param name="type">自动策略</param>
        public void SetAutoLogonPolicy(int type)
        {
            HttpObj.DoMethod("SetAutoLogonPolicy", new object[] { type });
        }
        /// <summary>
        /// 忽略错误,忽略HTTPS错误证书
        /// </summary>
        public void ErrorIgnore()
        {
            HttpObj.DoMethod(] { ,  });
        }

        /// <summary>
        /// 打开
        /// </summary>
        /// <param name="url">地址</param>
        /// <param name="openMethod">方法</param>
        /// <param name="async">异步</param>
        public void Open(string url, string openMethod = "GET", bool async = false)
        {
            url = url.Trim();
            openMethod = openMethod.ToUpper();
            ) url = "http://" + url;
            if (Auto == true)
            {
                IsAccept = IsAcceptLanguage = IsReferer = IsUserAgent = IsContentType = false;
                IsPOST = openMethod.ToUpper() == "POST";
                Referer = url;
            }
            HttpObj.DoMethod("Open", new object[] { openMethod, url, async });
        }
        /// <summary>
        /// 发送
        /// </summary>
        /// <param name="body"></param>
        /// <returns></returns>
        public void Send(string body = "")
        {
            if (Auto == true)
            {
                if (IsAccept == false)
                {
                    IsAccept = true;
                    HttpObj.DoMethod("SetRequestHeader", new object[] { "Accept", Accept });
                }
                if (IsAcceptLanguage == false)
                {
                    IsAcceptLanguage = true;
                    HttpObj.DoMethod("SetRequestHeader", new object[] { "Accept-Language", AcceptLanguage });
                }
                if (IsReferer == false)
                {
                    IsReferer = true;
                    HttpObj.DoMethod("SetRequestHeader", new object[] { "Referer", Referer });
                }
                if (IsUserAgent == false)
                {
                    IsUserAgent = true;
                    HttpObj.DoMethod("SetRequestHeader", new object[] { "User-Agent", UserAgent });
                }
                if (IsPOST == true && IsContentType == false)
                {
                    IsContentType = true;
                    HttpObj.DoMethod("SetRequestHeader", new object[] { "Content-Type", ContentType });
                }
            }

            if (body != "")
            {
                HttpObj.DoMethod(] { body });
            }
            else
            {
                HttpObj.DoMethod("Send", new object[] { });
            }

        }
        /// <summary>
        /// 标记协议头
        /// </summary>
        /// <param name="header">协议头</param>
        private void MarkHeader(string header)
        {
            if (Auto == true && header != "")
            {
                header = header.ToLower();

                if (header == "accept")
                {
                    IsAccept = true;
                }
                else if (header == "accept-aanguage")
                {
                    IsAcceptLanguage = true;
                }
                else if (header == "referer")
                {
                    IsReferer = true;
                }
                else if (header == "user-agent")
                {
                    IsUserAgent = true;
                }
                else if (header == "content-type")
                {
                    IsContentType = true;
                }

            }
        }

        /// <summary>
        /// 设置请求头信息
        /// </summary>
        /// <param name="header">协议头,多个协议头请把【值】的参数留空 且协议头之间用换行符隔开并带上参数。如:“Accept-Language: zh-cn”+#换行符</param>
        /// <param name="value">值,留空则取【协议头】多个协议头方式</param>
        /// <returns></returns>
        public void SetRequestHeader(string header, string value = "")
        {
            if (header == "")
            {
                return;
            }
            if (value == "")
            {
                string str = header.Trim() + "\r\n";
                string temp;
                string tempheader;
                string tempvalue;
                string[] arr = str.Split(new string[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries);
                ; i < arr.Length; i++)
                {
                    temp = arr[i].Trim();
                    tempheader = temp.Substring(, temp.IndexOf(":"));

                    tempvalue = temp.Substring(temp.Length - temp.IndexOf();
                    var obj = HttpObj.DoMethod("SetRequestHeader", new object[] { tempheader, tempvalue });
                }
            }
            else
            {
                var obj = HttpObj.DoMethod("SetRequestHeader", new object[] { header, value });
            }

        }
        /// <summary>
        /// 删除协议头
        /// </summary>
        /// <param name="header"></param>
        public void DelHeader(string header)
        {
            HttpObj.DoMethod( });
        }
        /// <summary>
        /// 取指定协议头
        /// </summary>
        /// <param name="header"></param>
        public string GetResponseHeader(string header)
        {
            var obj = HttpObj.DoMethod("GetResponseHeader", new object[] { header });
            return obj.ToString();
        }

        /// <summary>
        /// 取返回协议头
        /// </summary>
        /// <returns></returns>
        public string GetAllResponseHeaders()
        {
            var obj = HttpObj.DoMethod("GetAllResponseHeaders", new object[] { });
            return obj.ToString();
        }
        /// <summary>
        /// 取重定向地址
        /// </summary>
        /// <returns></returns>
        public string GetLocation()
        {
            return GetResponseHeader("Location");
        }
        /// <summary>
        /// 异步超时
        /// </summary>
        /// <param name="i">秒</param>
        /// <returns></returns>
        public string WaitForResponse(int i)
        {
            object obj;
            obj = HttpObj.DoMethod("WaitForResponse", new object[] { i });
            if (obj != null) return obj.ToString();
            else return "True";
        }
        /// <summary>
        /// 中止
        /// </summary>
        public void Abort()
        {

            HttpObj.DoMethod("Abort", new object[] { });

        }
        /// <summary>
        /// 取指定Cookie
        /// </summary>
        /// <param name="name"></param>
        /// <returns></returns>
        public string GetCookie(string name)
        {
            string str = string.Empty;
            string result = string.Empty;
            str = HttpObj.DoMethod("GetAllResponseHeaders", new object[] { }).ToString();
            if (string.IsNullOrEmpty(str))
            {
                return "";
            }
            //Set-Cookie: =//
            result = str.Substring( + name.Length + , str.Length -  - name.Length -  - ); ;

            if (result == "")
            {
                //Set-Cookie:=//
                result = str.Substring( + name.Length + , str.Length -  - name.Length -  - );
            }
            return result;

        }
        /// <summary>
        /// 取返回Cookies
        /// </summary>
        /// <param name="name"></param>
        /// <returns></returns>
        public string GetCookie()
        {
            string str = string.Empty;
            string result = string.Empty;
            string temp = string.Empty;
            str = HttpObj.DoMethod("GetAllResponseHeaders", new object[] { }).ToString();
            string[] arr = str.Split(new string[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries);
            ; i < arr.Length; i++)
            {
                temp = arr[i].Trim();
                )
                {
                    )
                    {
                        temp = arr[i].Substring(, str.Length - );
                    }
                    else
                    {
                        temp = temp.Substring();
                    }
                    result = result + temp + ";";
                }
            }
            return result;

        }
        /// <summary>
        /// 设置Accept
        /// </summary>
        /// <param name="cookies"></param>
        public void SetAccept(string Accept_ = "")
        {
            if (Accept_ == "")
            {
                Accept_ = Accept;
            }
            if (Auto == true && Accept_ != "")
            {
                IsAccept = true;
                Accept = Accept_;
            }
            HttpObj.DoMethod("SetRequestHeader", new object[] { "Accept", Accept_ });
        }
        /// <summary>
        /// 设置UA
        /// </summary>
        /// <param name="UA"></param>
        public void SetUA(string UA = "")
        {
            if (UA == "")
            {
                UA = UserAgent;
            }
            if (Auto == true && UA != "")
            {
                IsUserAgent = true;
                UserAgent = UA;
            }
            HttpObj.DoMethod("SetRequestHeader", new object[] { "User-Agent", UA });
        }
        /// <summary>
        /// 设置来路
        /// </summary>
        /// <param name="Referer_"></param>
        public void SetReferer(string Referer_ = "")
        {
            if (Referer_ == "")
            {
                Referer_ = Referer;
            }
            if (Auto == true && Referer_ != "")
            {
                IsReferer = true;
                Referer = Referer_;
            }
            HttpObj.DoMethod("SetRequestHeader", new object[] { "Referer", Referer_ });
        }
        /// <summary>
        /// 设置内容类型
        /// </summary>
        /// <param name="Content_Type"></param>
        public void SetContentType(string Content_Type = "")
        {
            if (Content_Type == "")
            {
                Content_Type = ContentType;
            }
            if (Auto == true && Content_Type != "")
            {
                IsContentType = true;
                ContentType = Content_Type;
            }
            HttpObj.DoMethod("SetRequestHeader", new object[] { "Content-Type", Content_Type });
        }
        /// <summary>
        /// 设置cookie
        /// </summary>
        /// <param name="cookies"></param>
        public void SetCookies(string cookies)
        {
            var obj = HttpObj.DoMethod("SetRequestHeader", new object[] { "Cookie", cookies });
        }
        #region      辅助方法
        /// <summary>
        /// 字节数组生成图片
        /// </summary>
        /// <param name="Bytes">字节数组</param>
        /// <returns>图片</returns>
        public Image byteArrayToImage(byte[] Bytes)
        {
            if (Bytes == null)
            {
                return null;
            }
            using (MemoryStream ms = new MemoryStream(Bytes))
            {
                Image outputImg = Image.FromStream(ms);
                return outputImg;
            }

        }
        /// <summary>
        /// 执行js代码(JS代码,参数,调用方法名,方法名[默认Eval 可选Run])
        ///
        /// </summary>
        /// <param name="reString">JS代码</param>
        /// <param name="para">参数</param>
        /// <param name="MethodName">调用方法名</param>
        /// <param name="Method">方法名:默认Eval 可选Run</param>
        /// <returns></returns>
        public string RunJsMethod(string reString, string para, string MethodName, string Method = "Eval")
        {
            try
            {
                Type obj = Type.GetTypeFromProgID("ScriptControl");
                if (obj == null) return string.Empty;
                object ScriptControl = Activator.CreateInstance(obj);
                obj.InvokeMember("Language", BindingFlags.SetProperty, null, ScriptControl, new object[] { "JScript" });
                obj.InvokeMember("AddCode", BindingFlags.InvokeMethod, null, ScriptControl, new object[] { reString });
                object objx = obj.InvokeMember(Method, BindingFlags.InvokeMethod, null, ScriptControl, new object[] { string.Format("{0}({1})", MethodName, para) }).ToString();//执行结果
                if (objx == null)
                {
                    return string.Empty;
                }
                return objx.ToString();
            }
            catch (Exception ex)
            {
                string ErrorInfo = string.Format("执行JS出现错误:   \r\n 错误描述: {0} \r\n 错误原因: {1} \r\n 错误来源:{2}", ex.Message, ex.InnerException.Message, ex.InnerException.Source);//异常信息
                return ErrorInfo;
            }
        }
        public string IP138()
        {
            //获取外网IP
            string tempip = "";
            try
            {
                WebRequest wr = WebRequest.Create("http://www.ip138.com/ips138.asp");
                Stream s = wr.GetResponse().GetResponseStream();
                StreamReader sr = new StreamReader(s, Encoding.Default);
                string all = sr.ReadToEnd(); //读取网站的数据

                ;
                int end = all.IndexOf("]", start);
                tempip = all.Substring(start, end - start);
                sr.Close();
                s.Close();
            }
            catch
            {
            }
            return tempip;
        }
        public Image convertImg(byte[] datas)
        {
            MemoryStream ms = new MemoryStream(datas);
            Image img = Image.FromStream(ms, true);//在这里出错
            //流用完要及时关闭
            ms.Close();
            return img;
        }
        public byte[] GetByteImage(Image img)
        {
            byte[] bt = null;
            if (!img.Equals(null))
            {
                using (MemoryStream mostream = new MemoryStream())
                {
                    Bitmap bmp = new Bitmap(img);
                    bmp.Save(mostream, System.Drawing.Imaging.ImageFormat.Bmp);//将图像以指定的格式存入缓存内存流
                    bt = new byte[mostream.Length];
                    mostream.Position = ;//设置留的初始位置
                    mostream.Read(bt, , Convert.ToInt32(bt.Length));
                }
            }
            return bt;
        }
        public string UpdateCookie(string cookie1, string cookie2)
        {
            StringBuilder sb = new StringBuilder();
            Dictionary<string, string> dicCookie = new Dictionary<string, string>();
            //遍历cookie1
            if (!string.IsNullOrEmpty(cookie1))
            {
                foreach (string cookie in cookie1.Replace(',', ';').Split(';'))
                {
                    )
                    {
                        ].Trim();
                        ).Trim();
                        dicCookie.Add(key, cookie);
                    }
                }
            }
            if (!string.IsNullOrEmpty(cookie2))
            {
                //遍历cookie2
                foreach (string cookie in cookie2.Replace(',', ';').Split(';'))
                {
                    )
                    {
                        ].Trim();
                        ).Trim();
                        if (dicCookie.ContainsKey(key))
                        {
                            dicCookie[key] = cookie;
                        }
                        else
                        {
                            dicCookie.Add(key, cookie);
                        }
                    }
                }
            }
            ;
            foreach (var item in dicCookie)
            {
                i++;
                if (i < dicCookie.Count)
                {
                    sb.Append(item.Value + ";");
                }
                else
                {
                    sb.Append(item.Value);
                }
            }
            return sb.ToString();
        }
        #endregion

    }
}

WinHttp的更多相关文章

  1. winhttp demo

    #include <string>#include <iostream>#include <windows.h>#include <winhttp.h> ...

  2. HTTP的RST包与WinHttp延迟关闭TCP连接

    一.RST包也常见于断开TCP连接  几个月前用wireshark抓HTTP包发现有的网络通信在结束的时候没有使用四次握手,而是直接使用RST包.如: 在TCP协议中RST表示复位,用来异常的关闭连接 ...

  3. 使用 WinHttp 实现文件下载

    #include <Windows.h> #include <Winhttp.h> #pragma comment(lib,"Winhttp.lib") t ...

  4. 使用WinINet和WinHTTP实现Http访问

    使用WinINet和WinHTTP实现Http访问 Http访问有两种方式,GET和POST,就编程来说GET方式相对简单点,它不用向服务器提交数据,在这个例程中我使用POST方式,提交数据value ...

  5. WinHTTP Web Proxy Auto-Discovery Service

    下面是网上搜集的,个人没有做测试,----------------------------- WinHTTP Web Proxy Auto-Discovery Service 服务成功发送一个 开始 ...

  6. WINHTTP的API接口说明。

    BOOL WINAPI WinHttpAddRequestHeaders(   _In_  HINTERNET hRequest,   _In_  LPCWSTR pwszHeaders,   _In ...

  7. 使用WinINet和WinHTTP实现Http訪问

    使用WinINet和WinHTTP实现Http訪问 飘飘白云 l_zhaohui@163.com 2007-11-30 Http訪问有两种方式,GET和POST,就编程来说GET方式相对简单点,它不用 ...

  8. 达到HTTP合约Get、Post和文件上传功能——采用WinHttp介面

    于<采用WinHttp实现HTTP协议Get.Post和文件上传功能>一文中,我已经比較具体地解说了怎样使用WinHttp接口实现各种协议. 在近期的代码梳理中,我认为Post和文件上传模 ...

  9. WINHTTP的API接口说明

    BOOL WINAPI WinHttpAddRequestHeaders(   _In_  HINTERNET hRequest,   _In_  LPCWSTR pwszHeaders,   _In ...

随机推荐

  1. Linq在Array,List,Dictionary中的应用

    Linq在Array,List,Dictionary中的应用 今天在实际工作中需要对array,list,dictionary进行排序,试一试linq,发现非常好用,代码如下: using Syste ...

  2. java动态代理的2种实现方式

    java的动态代理在接java的api上有说明,这里就不写了.我理解的代理: 对特定接口中特定方法的功能进行扩展,这就是代理.代理是通过代理实例关联的调用处理程序对象调用方法. 下面通过一个例子看一下 ...

  3. intellij idea 15 修改基础配置加载路径

    一.概述 intellij idea 15 默认配置的启动加载路径是"C:\Users\Administrator.IntelliJIdea15",这样会导致占用C盘的空间越来越多 ...

  4. 【重大更新】开源跨平台物联网通讯框架ServerSuperIO 2.0(SSIO)下载

    更新具体细节参见:[更新设计]跨平台物联网通讯框架ServerSuperIO 2.0 ,功能.BUG.细节说明,以及升级思考过程! 声明:公司在建设工业大数据平台,SSIO正好能派上用场,所以抓紧时间 ...

  5. linux(十二)___Apache服务器用户认证、虚拟主机的配置

    创建xiangkejin  zhangsan两个用户 可看见文件中创建的两个用户: 建立虚拟目录并配置用户认证 ①建立虚拟目录 /xiangkejin ②在Apache的主配置文件httpd.conf ...

  6. [原创]如何利用BI搭建电商数据分析平台

    某电商是某大型服装集团下的重要销售平台.2015 年,该集团品牌价值达数百亿元,产品质量.市场占有率.出口创汇.销售收入连年居全国绒纺行业第一,在中国有终端店3000多家,零售额80 亿.其羊绒制品年 ...

  7. iOS之数字的格式化

    //通过NSNumberFormatter,同样可以设置NSNumber输出的格式.例如如下代码: NSNumberFormatter *formatter = [[NSNumberFormatter ...

  8. 服务器开启https协议

    开启Tomcat https服务 发布企业级应用的时候遇到一个问题,就是IOS7.1之后app的下载地址URL必须是https开头的协议,所以服务器必须支持https协议. 实验环境:Mac OSX ...

  9. iOS 开发者账号到期续费流程

    1.登录developer.apple.com,查看到期时间 2.到期提醒通知,点击Renew Membership续费(一般提前一个月提醒续费) 3.个人开发者账号续费需要支付 688人民币/年(9 ...

  10. LintCode389.判断数独是否合法

    LintCode简单题:判断数独是否合法 问题描述: 请判定一个数独是否有效. 该数独可能只填充了部分数字,其中缺少的数字用 . 表示. 注意事项: 一个合法的数独(仅部分填充)并不一定是可解的.我们 ...