예제 #1
0
파일: SdJscript.cs 프로젝트: noear/SiteD
        public void loadJs(JsEngine js)
        {
            if (require.isEmpty() == false) {
                foreach (SdNode n1 in require.items()) {
                    //1.如果本地可以加载并且没有出错
                    if (String.IsNullOrEmpty(n1.lib) == false) {
                        if (loadLib(js, n1.lib))
                            continue;
                    }

                    //2.尝试网络加载
                    Log.v("SdJscript", n1.url);

                    if (n1.cache == 0) {
                        n1.cache = 1;
                    }

                    HttpMessage msg = new HttpMessage(n1, n1.url);
                    msg.callback = (code, sender, text, url302) => {
                        if (code == 1) {
                            js.loadJs(text);
                        }
                    };

                    Util.http(s, false, msg);
                }
            }

            if (String.IsNullOrEmpty(code) == false) {
                js.loadJs(code);
            }
        }
예제 #2
0
파일: Util.cs 프로젝트: noear/SiteD
        public async static void http(SdSource source, bool isUpdate, HttpMessage msg) {
            log(source, "Util.http", msg.url);

            String cacheKey2 = null;
            String args = "";
            if (msg.form == null)
                cacheKey2 = msg.url;
            else {
                StringBuilder sb = new StringBuilder();
                sb.Append(msg.url);
                foreach (String key in msg.form.Keys) {
                    sb.Append(key).Append("=").Append(msg.form[key]).Append(";");
                }
                cacheKey2 = sb.ToString();
                args = cacheKey2;
            }
             String cacheKey = cacheKey2;

            __CacheBlock block = await cache.get(cacheKey);

            if (isUpdate == false && msg.config.cache > 0) {
                if (block != null && block.isOuttime(msg.config) == false) {
                    log(source, "Util.incache.url", msg.url);
                    msg.callback(1, msg, block.value, null);
                    return;
                }
            }

            doHttp(source, msg, block, (code, msg2, data, url302) => {
                if (code == 1) {
                    cache.save(cacheKey, data);
                }

                msg.callback(code, msg2, data, url302);
            });

            source.DoTraceUrl(msg.url, args, msg.config);
        }
예제 #3
0
파일: Util.cs 프로젝트: noear/SiteD
        private static async void doHttp(SdSource source, HttpMessage msg, __CacheBlock cache, HttpCallback callback) {
            var encoding = Encoding.GetEncoding(msg.config.encode());

            AsyncHttpClient client = new AsyncHttpClient();
            client.UserAgent(msg.config.ua());
            client.Encoding(msg.config.encode());

            foreach (String key in msg.header.Keys) {
                client.Header(key, msg.header[key]);
            }

            string newUrl = null;
            if (msg.url.IndexOf(" ") >= 0)
                newUrl = Uri.EscapeUriString(msg.url);
            else
                newUrl = msg.url;

            client.Url(newUrl);

            string temp = null;

            AsyncHttpResponse rsp = null;
            try {
                if ("post".Equals(msg.config.method))
                    rsp = await client.Post(msg.form);
                else
                    rsp = await client.Get();

                if (rsp.StatusCode == HttpStatusCode.OK) {
                    source.setCookies(rsp.Cookies);
                    temp = rsp.GetString();

                    if (string.IsNullOrEmpty(rsp.location) == false) {
                        Uri uri = new  Uri(msg.url);
                        rsp.location = uri.Scheme + "://" + uri.Host + rsp.location;
                    }
                }
            }
            catch (Exception ex) {
                Util.log(source, "HTTP", ex.Message);
            }

            if (temp == null) {
                if (cache == null || cache.value == null)
                    callback(-2, msg, null, rsp.location);
                else
                    callback(1, msg, cache.value, rsp.location);
            }
            else
                callback(1, msg, temp, rsp.location);
        }