Example #1
0
 private static HttpResponseMessage newWorker(string method, string Url, byte[] postData = null, Hashtable headers = null)
 {
     using (var client = new HttpClient())
     {
         var request = new HttpRequestMessage(new HttpMethod(method), "http://" + api_domain + Url);
         if (headers == null)
         {
             headers = new Hashtable();
         }
         headers.Add("mkdir", "true");
         if (upAuth)
         {
             var date = DateTools.ConvertToGMT();
             var auth = Encryptor.Md5Encryptor32(method + '&' + Url + '&' + date + '&' + (postData == null ? 0 : postData.Length) + '&' + Encryptor.Md5Encryptor32(password).ToLower());
             request.Headers.TryAddWithoutValidation("Date", date);
             request.Headers.TryAddWithoutValidation("Authorization", "UpYun " + username + ':' + auth);
         }
         else
         {
             request.Headers.TryAddWithoutValidation("Authorization", "Basic " +
                                                     System.Convert.ToBase64String(new System.Text.ASCIIEncoding().GetBytes(username + ":" + password)));
         }
         foreach (DictionaryEntry var in headers)
         {
             request.Headers.Add(var.Key.ToString(), var.Value.ToString());
         }
         if (postData != null)
         {
             request.Content = new StreamContent(new MemoryStream(postData));
         }
         client.SendAsync(request).ContinueWith((requestTask) =>
         {
             return(requestTask.Result);
         }).Wait();
         return(new HttpResponseMessage());
     }
 }
Example #2
0
        private static String RequestGet(String url)
        {
            var str = "";

            try
            {
                if (url.StartsWith("https://"))
                {
                    #region HTTPS请求
                    var uri        = new Uri(url);
                    var hostSocket = Wlniao.Net.WlnSocket.GetSocket(uri.Host, uri.Port);
                    var reqStr     = "";
                    reqStr += "GET " + uri.PathAndQuery + " HTTP/1.1";
                    reqStr += "\r\nHost: " + uri.Host;
                    reqStr += "\r\nDate: " + DateTools.ConvertToGMT(DateTools.GetUnix());
                    reqStr += "\r\nAccept: application/json";
                    reqStr += "\r\n";
                    reqStr += "\r\n";
                    var request = System.Text.Encoding.UTF8.GetBytes(reqStr);
                    using (var ssl = new System.Net.Security.SslStream(new System.Net.Sockets.NetworkStream(hostSocket, true), false, new System.Net.Security.RemoteCertificateValidationCallback(ValidateServerCertificate), null))
                    {
                        ssl.AuthenticateAsClientAsync(uri.Host).ContinueWith((_rlt) =>
                        {
                            if (ssl.IsAuthenticated)
                            {
                                ssl.Write(request);
                                ssl.Flush();
                                var length  = 0;
                                var end     = false;
                                var start   = false;
                                var chunked = false;
                                while (true)
                                {
                                    var rev   = new byte[65535];
                                    var index = ssl.Read(rev, 0, rev.Length);
                                    if (index == 0)
                                    {
                                        break;
                                    }
                                    var beffur = new byte[index];
                                    Buffer.BlockCopy(rev, 0, beffur, 0, index);
                                    var tempstr = strUtil.GetUTF8String(beffur);
                                    var lines   = tempstr.Split(new string[] { "\r\n" }, StringSplitOptions.None);
                                    index       = 0;
                                    #region Headers处理
                                    if (!start && lines[0].StartsWith("HTTP"))
                                    {
                                        var ts = lines[0].Split(' ');
                                        if (ts[1] == "200")
                                        {
                                            for (index = 1; index < lines.Length; index++)
                                            {
                                                if (lines[index].ToLower().StartsWith("content-length"))
                                                {
                                                    ts     = lines[index].Split(' ');
                                                    length = cvt.ToInt(ts[1]);
                                                }
                                                else if (lines[index].ToLower().StartsWith("transfer-encoding"))
                                                {
                                                    chunked = lines[index].EndsWith("chunked");
                                                }
                                                if (string.IsNullOrEmpty(lines[index]))
                                                {
                                                    index++;
                                                    start = true;
                                                    break;
                                                }
                                            }
                                        }
                                        else
                                        {
                                            index = lines.Length;
                                            break;
                                        }
                                    }
                                    #endregion
                                    #region 取文本内容
                                    for (; index < lines.Length; index++)
                                    {
                                        var line = lines[index];
                                        if (chunked)
                                        {
                                            index++;
                                            if (index < lines.Length)
                                            {
                                                var tempLength = cvt.DeHex(line, "0123456789abcdef");
                                                if (tempLength > 0)
                                                {
                                                    length += (int)tempLength;
                                                    line    = lines[index];
                                                }
                                                else if (lines.Length == index + 2 && string.IsNullOrEmpty(lines[index + 1]))
                                                {
                                                    end = true;
                                                    break;
                                                }
                                                else
                                                {
                                                    break;
                                                }
                                            }
                                            else
                                            {
                                                break;
                                            }
                                        }
                                        if (index == 0 || (chunked && index == 1) || str.Length == 0)
                                        {
                                            str += line;
                                        }
                                        else
                                        {
                                            str += "\r\n" + line;
                                        }
                                        if (!chunked && System.Text.Encoding.UTF8.GetBytes(str).Length >= length)
                                        {
                                            end = true;
                                        }
                                    }
                                    if (end)
                                    {
                                        break;
                                    }
                                    #endregion
                                }
                            }
                        }).Wait();
                    }
                    hostSocket.Using = false;
                    #endregion
                }
                else
                {
                    #region HTTP请求
                    var response = new System.Net.Http.HttpClient().GetAsync(url).GetAwaiter().GetResult();
                    str = response.Content.ReadAsStringAsync().GetAwaiter().GetResult();
                    #endregion
                }
                if (string.IsNullOrEmpty(str))
                {
                    str = "{\"success\":false,\"message\":\"empty response\",\"data\":\"\"}";
                }
                else
                {
                    log.Info(str);
                }
            }
            catch (Exception ex)
            {
                str = "{\"success\":false,\"message\":\"request exception\",\"data\":\"" + ex.Message + "\"}";
            }
            return(str);
        }
Example #3
0
        /// <summary>
        /// 发起Get请求
        /// </summary>
        /// <param name="ApiHost"></param>
        /// <param name="ApiPath"></param>
        /// <param name="AppKey"></param>
        /// <param name="AppSecret"></param>
        /// <param name="kvs"></param>
        /// <returns></returns>
        public static ApiResult <String> GetString(String ApiHost, String ApiPath, String AppKey, String AppSecret, params KeyValuePair <String, String>[] kvs)
        {
            var rlt = new ApiResult <String>()
            {
                success = false, message = "", data = ""
            };

            if (string.IsNullOrEmpty(AppKey))
            {
                rlt.message = "云市场API应用AppKey未设置";
            }
            else if (string.IsNullOrEmpty(AppSecret))
            {
                rlt.message = "云市场API应用AppSecret未设置";
            }
            else
            {
                using (var client = new System.Net.Http.HttpClient())
                {
                    try
                    {
                        var time  = DateTools.GetUnix();
                        var nonce = System.Guid.NewGuid().ToString();

                        var httpMethod  = "GET";
                        var accept      = "application/json";
                        var contentMD5  = "";
                        var contentType = "application/json; charset=utf-8";
                        var date        = DateTools.ConvertToGMT();
                        var headers     = new List <KeyValuePair <String, String> >();
                        headers.Add(new KeyValuePair <String, String>("X-Ca-Key", AppKey));
                        headers.Add(new KeyValuePair <String, String>("X-Ca-Nonce", nonce));
                        headers.Add(new KeyValuePair <String, String>("X-Ca-Timestamp", time.ToString() + "000"));
                        //headers.Add(new KeyValuePair<String, String>("X-Ca-Stage", "RELEASE"));
                        //headers.Add(new KeyValuePair<String, String>("X-Ca-Request-Mode", "debug"));
                        headers.Sort((KeyValuePair <string, string> a, KeyValuePair <string, string> b) => { return(string.Compare(a.Key, b.Key, StringComparison.Ordinal)); });
                        var headSign = "";
                        foreach (var header in headers)
                        {
                            headSign += header.Key + ":" + header.Value + "\n";
                        }
                        var url     = "";
                        var urlSign = "";
                        var _kvs    = new List <KeyValuePair <String, String> >(kvs);
                        _kvs.Sort((KeyValuePair <string, string> a, KeyValuePair <string, string> b) => { return(string.Compare(a.Key, b.Key, StringComparison.Ordinal)); });
                        foreach (var kv in _kvs)
                        {
                            url += kv.Key + "=" + kv.Value + "&";
                            if (string.IsNullOrEmpty(kv.Value))
                            {
                                urlSign += kv.Key + "&";
                            }
                            else
                            {
                                urlSign += kv.Key + "=" + kv.Value + "&";
                            }
                        }
                        url     = (ApiHost + ApiPath + "?" + url).TrimEnd('&', '?');
                        urlSign = (ApiPath + "?" + urlSign).TrimEnd('&', '?');



                        var hmac = new System.Security.Cryptography.HMACSHA256()
                        {
                            Key = Encoding.UTF8.GetBytes(AppSecret.ToCharArray())
                        };
                        var signStr = httpMethod + "\n" + accept + "\n" + contentMD5 + "\n" + contentType + "\n" + date + "\n" + headSign + urlSign;
                        var sign    = System.Convert.ToBase64String(hmac.ComputeHash(Encoding.UTF8.GetBytes(signStr.ToCharArray())));
                        #region
                        var uri        = new Uri(url);
                        var hostSocket = Net.WlnSocket.GetSocket(uri.Host, uri.Port);
                        try
                        {
                            var reqStr = "";
                            reqStr += "GET " + uri.PathAndQuery + " HTTP/1.1";
                            reqStr += "\r\nHost: " + uri.Host;
                            reqStr += "\r\nDate: " + date;
                            reqStr += "\r\nAccept: " + accept;
                            reqStr += "\r\nContent-MD5: " + contentMD5;
                            reqStr += "\r\nContent-Type: " + contentType;
                            foreach (var header in headers)
                            {
                                reqStr += "\r\n" + header.Key + ": " + header.Value;
                            }
                            reqStr += "\r\nX-Ca-Signature: " + sign;
                            reqStr += "\r\nX-Ca-Signature-Headers: " + strUtil.Join(",", headers.Select(a => a.Key).ToArray());
                            reqStr += "\r\n";
                            reqStr += "\r\n";
                            var request = Encoding.UTF8.GetBytes(reqStr);
                            if (hostSocket.Send(request, request.Length, System.Net.Sockets.SocketFlags.None) > 0)
                            {
                                var str     = "";
                                var length  = 0;
                                var end     = false;
                                var start   = false;
                                var chunked = false;
                                while (true)
                                {
                                    var rev   = new byte[65535];
                                    var index = hostSocket.Receive(rev, rev.Length, System.Net.Sockets.SocketFlags.None);
                                    if (index == 0)
                                    {
                                        break;
                                    }
                                    var tempstr = strUtil.GetUTF8String(rev, 0, index);
                                    var lines   = tempstr.Split(new string[] { "\r\n" }, StringSplitOptions.None);
                                    index = 0;
                                    #region Headers处理
                                    if (!start && lines[0].StartsWith("HTTP"))
                                    {
                                        var ts = lines[0].Split(' ');
                                        if (ts[1] == "200")
                                        {
                                            for (index = 1; index < lines.Length; index++)
                                            {
                                                if (lines[index].ToLower().StartsWith("content-length"))
                                                {
                                                    ts     = lines[index].Split(' ');
                                                    length = cvt.ToInt(ts[1]);
                                                }
                                                else if (lines[index].ToLower().StartsWith("transfer-encoding"))
                                                {
                                                    chunked = lines[index].EndsWith("chunked");
                                                }
                                                if (string.IsNullOrEmpty(lines[index]))
                                                {
                                                    index++;
                                                    start = true;
                                                    break;
                                                }
                                            }
                                        }
                                        else
                                        {
                                            foreach (var line in lines)
                                            {
                                                if (line.SplitBy(":")[0] == "X-Ca-Error-Message")
                                                {
                                                    rlt.message = line.Substring(line.IndexOf(' ') + 1);
                                                    return(rlt);
                                                }
                                            }
                                            rlt.message = lines.LastOrDefault();
                                            index       = lines.Length;
                                            break;
                                        }
                                    }
                                    #endregion
                                    #region 取文本内容
                                    for (; index < lines.Length; index++)
                                    {
                                        var line = lines[index];
                                        if (chunked)
                                        {
                                            index++;
                                            if (index < lines.Length)
                                            {
                                                var tempLength = cvt.DeHex(line, "0123456789abcdef");
                                                if (tempLength > 0)
                                                {
                                                    length += (int)tempLength;
                                                    line    = lines[index];
                                                }
                                                else if (lines.Length == index + 2 && string.IsNullOrEmpty(lines[index + 1]))
                                                {
                                                    end = true;
                                                    break;
                                                }
                                                else
                                                {
                                                    break;
                                                }
                                            }
                                            else
                                            {
                                                break;
                                            }
                                        }
                                        if (index == 0 || (chunked && index == 1) || str.Length == 0)
                                        {
                                            str += line;
                                        }
                                        else
                                        {
                                            str += "\r\n" + line;
                                        }
                                        if (!chunked && System.Text.Encoding.UTF8.GetBytes(str).Length >= length)
                                        {
                                            end = true;
                                        }
                                    }
                                    if (end)
                                    {
                                        break;
                                    }
                                    #endregion
                                }
                                if (!string.IsNullOrEmpty(str))
                                {
                                    rlt.success = true;
                                    rlt.message = "";
                                    rlt.data    = str;
                                }
                            }
                            hostSocket.Using = false;
                        }
                        catch (Exception ex)
                        {
                            hostSocket.Using = false;
                            rlt.message      = ex.Message;
                        }
                        #endregion
                    }
                    catch { }
                }
            }
            return(rlt);
        }
Example #4
0
        /// <summary>
        /// 通过Socket发送Http请求
        /// </summary>
        /// <param name="url"></param>
        /// <param name="kvs"></param>
        /// <returns></returns>
        public static String HttpGet(String url, params KeyValuePair <String, String>[] kvs)
        {
            var sb         = new System.Text.StringBuilder();
            var uri        = new Uri(url);
            var hostSocket = Net.WlnSocket.GetSocket(uri.Host, uri.Port);

            try
            {
                var reqStr = "";
                reqStr += "GET " + uri.PathAndQuery + " HTTP/1.1";
                reqStr += "\r\nHost: " + uri.Host;
                reqStr += "\r\nDate: " + DateTools.ConvertToGMT(DateTools.GetUnix());
                reqStr += "\r\nAccept: application/json";
                if (kvs != null)
                {
                    foreach (var kv in kvs)
                    {
                        reqStr += "\r\n" + kv.Key + ": " + kv.Value;
                    }
                }
                reqStr += "\r\n";
                reqStr += "\r\n";
                var request = Encoding.UTF8.GetBytes(reqStr);
                if (hostSocket.Send(request, request.Length, System.Net.Sockets.SocketFlags.None) > 0)
                {
                    var length  = 0;
                    var end     = false;
                    var start   = false;
                    var chunked = false;
                    while (true)
                    {
                        var rev   = new byte[65535];
                        var index = hostSocket.Receive(rev, rev.Length, System.Net.Sockets.SocketFlags.None);
                        if (index == 0)
                        {
                            break;
                        }
                        var tempstr = Encoding.UTF8.GetString(rev, 0, index);
                        var lines   = tempstr.Split(new string[] { "\r\n" }, StringSplitOptions.None);
                        index = 0;
                        #region Headers处理
                        if (!start && lines[0].StartsWith("HTTP"))
                        {
                            var ts = lines[0].Split(' ');
                            if (ts[1] == "200")
                            {
                                for (index = 1; index < lines.Length; index++)
                                {
                                    if (lines[index].ToLower().StartsWith("content-length"))
                                    {
                                        ts     = lines[index].Split(' ');
                                        length = cvt.ToInt(ts[1]);
                                    }
                                    else if (lines[index].ToLower().StartsWith("transfer-encoding"))
                                    {
                                        chunked = lines[index].EndsWith("chunked");
                                    }
                                    if (string.IsNullOrEmpty(lines[index]))
                                    {
                                        index++;
                                        start = true;
                                        break;
                                    }
                                }
                            }
                            else
                            {
                                index = lines.Length;
                                break;
                            }
                        }
                        #endregion
                        #region 取文本内容
                        for (; index < lines.Length; index++)
                        {
                            var line = lines[index];
                            if (chunked)
                            {
                                index++;
                                if (index < lines.Length)
                                {
                                    var tempLength = cvt.DeHex(line, "0123456789abcdef");
                                    if (tempLength > 0)
                                    {
                                        length += (int)tempLength;
                                        line    = lines[index];
                                    }
                                    else if (lines.Length == index + 2 && string.IsNullOrEmpty(lines[index + 1]))
                                    {
                                        end = true;
                                        break;
                                    }
                                    else
                                    {
                                        break;
                                    }
                                }
                                else
                                {
                                    break;
                                }
                            }
                            if (index == 0 || (chunked && index == 1) || sb.Length == 0)
                            {
                                sb.Append(line);
                            }
                            else
                            {
                                sb.Append("\r\n" + line);
                            }
                            if (!chunked && System.Text.Encoding.UTF8.GetBytes(sb.ToString()).Length >= length)
                            {
                                end = true;
                            }
                        }
                        if (end)
                        {
                            break;
                        }
                        #endregion
                    }
                }
                hostSocket.Using = false;
            }
            catch { }
            return(sb.ToString());
        }