示例#1
0
        public async Task <string> Post(string url, string body, string authToken = null)
        {
            RequestBody requestBody = RequestBody.Create(JSON, body);
            Request     request     = new Request.Builder().Url(url).Post(requestBody).Build();

            return(await SendRequest(request, authToken));
        }
示例#2
0
        private void DownloadFile(string controller, string action, List <ServerRequestParameter> list)
        {
            byte[] res;

            try
            {
                Client      client = new Client();
                RequestBody rb     = RequestBody.Create(controller, action);
                foreach (var parameter in list)
                {
                    rb.AddParameter(parameter.Key, parameter.Value);
                }

                client.SendRequest(rb);
                res            = client.GetResultFile();
                ServerResponse = client.Response;
            }
            catch (Exception ex)
            {
                MessageBox.Show("Error: \n" + ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }

            SaveFileDialog dialog = new SaveFileDialog();

            dialog.ShowDialog();

            if (string.IsNullOrEmpty(dialog.FileName))
            {
                return;
            }


            File.WriteAllBytes(dialog.FileName, res);
        }
示例#3
0
        public void Post(string url, string content, Action <ICall, Response> onResponse, Action <ICall, Java.IO.IOException> onFailure)
        {
            var body = RequestBody.Create(MediaType.Parse("text/plain"), Encoding.UTF8.GetBytes(content));

            Request request = new Request.Builder().Url(url).Post(body).Build();

            okHttpClient.NewCall(request).Enqueue(onResponse, onFailure);
        }
示例#4
0
        public static void CreateRequest()
        {
            OkHttpClient okHttpClient = new OkHttpClient();
            Request      request      = new Request.Builder()
                                        .Url(URL)
                                        .Post(RequestBody.Create(Square.OkHttp3.MediaType.Parse("text/x-markdown; charset=utf-8"), REQUESTBODY))
                                        .Build();

            OkHttp3Instrumentation.newCall(okHttpClient, request).Enqueue(new OnresponseOkHttpClient());
        }
示例#5
0
        public async Task <FileUploadResponse> UploadFileAsync(string url, FileBytesItem[] fileItems, string tag, IDictionary <string, string> headers = null, IDictionary <string, string> parameters = null)
        {
            if (fileItems == null || fileItems.Length == 0)
            {
                var fileUploadResponse = new FileUploadResponse("There are no items to upload", -1, tag);
                FileUploadError(this, fileUploadResponse);
                return(fileUploadResponse);
            }

            return(await Task.Run(() =>
            {
                try
                {
                    var requestBodyBuilder = PrepareRequest(parameters);

                    foreach (var fileItem in fileItems)
                    {
                        var mediaType = MediaType.Parse(GetMimeType(fileItem.Name));

                        if (mediaType == null)
                        {
                            mediaType = MediaType.Parse("*/*");
                        }


                        RequestBody fileBody = RequestBody.Create(mediaType, fileItem.Bytes);
                        requestBodyBuilder.AddFormDataPart(fileItem.FieldName, fileItem.Name, fileBody);
                    }

                    return MakeRequest(url, tag, requestBodyBuilder, headers);
                }
                catch (Java.Net.UnknownHostException ex)
                {
                    var fileUploadResponse = new FileUploadResponse("Host not reachable", -1, tag);
                    FileUploadError(this, fileUploadResponse);
                    System.Diagnostics.Debug.WriteLine(ex.ToString());
                    return fileUploadResponse;
                }
                catch (Java.IO.IOException ex)
                {
                    var fileUploadResponse = new FileUploadResponse(ex.ToString(), -1, tag);
                    FileUploadError(this, fileUploadResponse);
                    System.Diagnostics.Debug.WriteLine(ex.ToString());
                    return fileUploadResponse;
                }
                catch (Exception ex)
                {
                    var fileUploadResponse = new FileUploadResponse(ex.ToString(), -1, tag);
                    FileUploadError(this, fileUploadResponse);
                    System.Diagnostics.Debug.WriteLine(ex.ToString());
                    return fileUploadResponse;
                }
            }));
        }
示例#6
0
        private async void button1_Click(object sender, EventArgs e)
        {
            button1.Enabled = false;
            button1.Text    = "Sending request...";

            var    list       = ((IEnumerable)dataGrid.DataSource).Cast <ServerRequestParameter>().ToList();
            string controller = txController.Text;
            string action     = txAction.Text;

            if (ckFileResult.Checked)
            {
                DownloadFile(controller, action, list);
                Result = new OperationResult()
                {
                    Status  = 600,
                    Entity  = "",
                    Message = "File saved"
                };
                Close();
                return;
            }

            SaveCache();

            OperationResult res = await Task.Run(() =>
            {
                try
                {
                    Client client  = new Client();
                    RequestBody rb = RequestBody.Create(controller, action);
                    foreach (var parameter in list)
                    {
                        rb.AddParameter(parameter.Key, parameter.Value);
                    }

                    client.SendRequest(rb);

                    var result     = client.GetResult();
                    ServerResponse = client.Response;
                    return(result);
                }
                catch (Exception ex)
                {
                    MessageBox.Show("Error: \n" + ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    return(null);
                }
            });

            Result = res;
            Close();
        }
示例#7
0
        public async Task <FileUploadResponse> UploadFileAsync(string url, FilePathItem[] fileItems, string tag, IDictionary <string, string> headers = null, IDictionary <string, string> parameters = null)
        {
            if (fileItems == null || fileItems.Length == 0)
            {
                var fileUploadResponse = new FileUploadResponse("There are no items to upload", -1, tag);
                FileUploadError(this, fileUploadResponse);
                return(fileUploadResponse);
            }

            return(await Task.Run(() =>
            {
                try
                {
                    var requestBodyBuilder = PrepareRequest(parameters);

                    foreach (var fileItem in fileItems)
                    {
                        Java.IO.File f = new Java.IO.File(fileItem.Path);
                        string fileAbsolutePath = f.AbsolutePath;

                        RequestBody file_body = RequestBody.Create(MediaType.Parse(GetMimeType(fileItem.Path)), f);
                        var fileName = fileAbsolutePath.Substring(fileAbsolutePath.LastIndexOf("/") + 1);
                        requestBodyBuilder.AddFormDataPart(fileItem.FieldName, fileName, file_body);
                    }

                    return MakeRequest(url, tag, requestBodyBuilder, headers);
                }
                catch (Java.Net.UnknownHostException ex)
                {
                    var fileUploadResponse = new FileUploadResponse("Host not reachable", -1, tag);
                    FileUploadError(this, fileUploadResponse);
                    System.Diagnostics.Debug.WriteLine(ex.ToString());
                    return fileUploadResponse;
                }
                catch (Java.IO.IOException ex)
                {
                    var fileUploadResponse = new FileUploadResponse(ex.ToString(), -1, tag);
                    FileUploadError(this, fileUploadResponse);
                    System.Diagnostics.Debug.WriteLine(ex.ToString());
                    return fileUploadResponse;
                }
                catch (Exception ex)
                {
                    var fileUploadResponse = new FileUploadResponse(ex.ToString(), -1, tag);
                    FileUploadError(this, fileUploadResponse);
                    System.Diagnostics.Debug.WriteLine(ex.ToString());
                    return fileUploadResponse;
                }
            }));
        }
示例#8
0
        private void btConnect_Click(object sender, EventArgs e)
        {
            try
            {
                treeView.Nodes.Clear();
                Client.Configure(txAddress.Text, int.Parse(txPort.Text), Encoding.UTF8, 1024000 * 10);
                Client client = new Client();

                RequestBody rb = RequestBody.Create("ServerInfoController", "FullServerInfo")
                                 .AddParameter("authorization", Auth.Token ?? "");
                client.SendRequest(rb);

                var result     = client.GetResult(typeof(ServerInfo));
                var serverInfo = (ServerInfo)result.Entity;

                lbDescription.Text = $"SocketAppServer, version {serverInfo.ServerVersion}, running on {serverInfo.MachineName}";

                foreach (var controllerInfo in serverInfo.ServerControllers)
                {
                    TreeNode node = new TreeNode(controllerInfo.ControllerName);
                    node.Tag = $"{controllerInfo.ControllerName}";

                    foreach (var action in controllerInfo.ControllerActions)
                    {
                        var child = new TreeNode(action);
                        child.Tag = $"{controllerInfo.ControllerName}:{action}";
                        node.Nodes.Add(child);
                    }

                    treeView.Nodes.Add(node);
                }
            }
            catch (Exception ex)
            {
                if (ex.Message.Contains("Unauthorized.") ||
                    ex.Message.Contains("Invalid or expired token"))
                {
                    Auth auth = new Auth();
                    auth.ShowDialog();
                    if (!string.IsNullOrEmpty(Auth.Token))
                    {
                        btConnect_Click(null, null);
                    }
                }
                else
                {
                    MessageBox.Show("Error: \n" + ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }
        }
示例#9
0
        private async void MakeHttpCall()
        {
#if __ANDROID__
            var client      = new OkHttpClient();
            var requestBody = RequestBody.Create(
                MediaType.Parse("application/json"),
                "{\"title\":\"foo\",\"body\": \"bar\", \"userId\":\"1\", \"id\":\"1\"}");
            var request = new Request.Builder()
                          .Url("https://jsonplaceholder.typicode.com/posts")
                          .Post(requestBody)
                          .Build();

            var response = await client.NewCall(request).ExecuteAsync();
#endif
        }
        public Response GetWalkingRoutePlanningResult(LatLng latLng1, LatLng latLng2, bool needEncode)
        {
            string key = mDefaultKey;

            if (needEncode)
            {
                try
                {
                    key = Java.Net.URLEncoder.Encode(mDefaultKey, "UTF-8");
                }
                catch (Java.IO.UnsupportedEncodingException e)
                {
                    e.PrintStackTrace();
                }
            }
            string url = mWalkingRoutePlanningURL + "?key=" + key;

            Response   response    = null;
            JSONObject origin      = new JSONObject();
            JSONObject destination = new JSONObject();
            JSONObject json        = new JSONObject();

            try
            {
                origin.Put("lat", latLng1.Latitude);
                origin.Put("lng", latLng1.Longitude);

                destination.Put("lat", latLng2.Latitude);
                destination.Put("lng", latLng2.Longitude);

                json.Put("origin", origin);
                json.Put("destination", destination);

                RequestBody requestBody = RequestBody.Create(JSON, json.ToString());
                Request     request     = new Request.Builder().Url(url).Post(requestBody).Build();
                response = GetNetClient().InitOkHttpClient().NewCall(request).Execute();
            }
            catch (JSONException e)
            {
                e.PrintStackTrace();
            }
            catch (IOException e)
            {
                e.PrintStackTrace();
            }
            return(response);
        }
示例#11
0
        public override void OnCreate()
        {
            base.OnCreate();

            userId = JwtHelper.GetAspNetUserId(UserSettings.Token);

            dbWriter = new SignalsDBWriter(this);
            timer    = new Timer
            {
                Interval = 30000,
                Enabled  = true
            };

            timer.Elapsed += (s, e) =>
            {
                Logger.Info("trying to sent telemetry...");

                var type      = MediaType.Parse("application/json; charset=utf-8");
                var telemetry = dbWriter.ReadTelemetry(userId, out ids);

                if (telemetry?.Count > 0)
                {
                    var          str     = Newtonsoft.Json.JsonConvert.SerializeObject(telemetry, new Trigger.Classes.TelemetryJsonConverter());
                    var          body    = RequestBody.Create(type, str);
                    OkHttpClient client  = new OkHttpClient();
                    Request      request = new Request.Builder()
                                           .Url(Url)
                                           .Header("scn-dev-msg", "")
                                           .Post(body)
                                           .Build();

                    Callback c = new Callback {
                        Writer = dbWriter, Ids = ids
                    };

                    var all_signals = telemetry.SelectMany(b => b.Select(i => i)).ToList();

                    Logger.Info("Send Telemetry: " + all_signals.Count.ToString());
                    client.NewCall(request).Enqueue(c);
                }
                else
                {
                    Logger.Info("No signals to send");
                }
            };
        }
        private OperationResult ExecuteRequest(string controllerName, string actionName,
                                               [FromBody] RequestParameter[] parameters)
        {
            var rb = RequestBody.Create(controllerName, actionName);

            if (parameters != null)
            {
                parameters.ToList().ForEach(p => rb.AddParameter(p.Name, p.Value));
            }

            using (ISocketClientConnection client = GetClient())
            {
                client.SendRequest(rb);
                var result = client.GetResult();
                return(result);
            }
        }
示例#13
0
        private void StartMessages(IWebSocket webSocket)
        {
            // we want to ping every 2 seconds
            new Timer(state =>
            {
                var buffer = new OkBuffer();
                buffer.WriteString("Ping!", Charset.DefaultCharset());
                webSocket.SendPing(buffer);
            }, null, TimeSpan.Zero, TimeSpan.FromSeconds(2));

            // we want to send a message every 5 seconds
            new Timer(state =>
            {
                var body = RequestBody.Create(WebSocket.Text, "Hello World!");
                webSocket.SendMessage(body);
            }, null, TimeSpan.Zero, TimeSpan.FromSeconds(3));
        }
示例#14
0
        private void Login()
        {
            settings.Login    = etLogin.Text;
            settings.Password = etPassword.Text;

            var json = Newtonsoft.Json.JsonConvert.SerializeObject(new LoginData {
                Login = etLogin.Text, Password = etPassword.Text
            });
            var         type = MediaType.Parse("application / json; charset = utf - 8");
            RequestBody body = RequestBody.Create(type, json);

            Request request = new Request.Builder()
                              .Url(UrlLogin)
                              .Header("Content-Type", "application/json")
                              .Post(body)
                              .Build();

            client.NewCall(request).Enqueue(this);
        }
示例#15
0
 private void FillActionParameters()
 {
     try
     {
         Client      c  = new Client();
         RequestBody rb = RequestBody.Create("ServerInfoController", "GetActionParameters")
                          .AddParameter("controller", txController.Text)
                          .AddParameter("action", txAction.Text)
                          .AddParameter("authorization", Auth.Token);
         c.SendRequest(rb);
         List <string> parameters = c.GetResult <List <string> >();
         List <ServerRequestParameter> requestParameters = new List <ServerRequestParameter>();
         parameters.ForEach(p => requestParameters.Add(new ServerRequestParameter
         {
             Key   = p,
             Value = ""
         }));
         dataGrid.DataSource = requestParameters;
     }
     catch { }
 }
示例#16
0
        public async void CustomNetworkEvent()
        {
            OkHttpClient okHttpClient = new OkHttpClient();
            Request      request      = new Request.Builder()
                                        .Url(CUSTOMURL)
                                        .Post(RequestBody.Create(Square.OkHttp3.MediaType.Parse("text/x-markdown; charset=utf-8"), REQUESTBODY))
                                        .Build();

            // Define custom network event
            NetworkMeasure networkMeasure = APMS.Instance.CreateNetworkMeasure(CUSTOMURL, "POST");

            networkMeasure.SetBytesSent(request.Headers().ByteCount());
            long bytesReceive = 0L;

            networkMeasure.Start();

            try
            {
                Response response = await okHttpClient.NewCall(request).ExecuteAsync();

                networkMeasure.SetStatusCode(response.Code());

                if (response.Body() != null)
                {
                    networkMeasure.SetBytesReceived(response.Body().ContentLength());
                    networkMeasure.SetContentType(response.Body().ContentType().ToString());
                    bytesReceive = DealResponseBody(response.Body());
                    response.Body().Close();
                }
                networkMeasure.PutProperty("Property", bytesReceive.ToString());
                networkMeasure.Stop();
            }
            catch (Exception ex)
            {
                networkMeasure.SetStatusCode(0);
                networkMeasure.PutProperty("Error Message", ex.Message);
                networkMeasure.PutProperty("Bytes", bytesReceive.ToString());
                networkMeasure.Stop();
            }
        }
示例#17
0
        private void Authenticate()
        {
            try
            {
                Client      c  = new Client();
                RequestBody rb = RequestBody.Create("AuthorizationController",
                                                    "Authorize")
                                 .AddParameter("user", txUser.Text)
                                 .AddParameter("password", txPassword.Text);
                c.SendRequest(rb);
                OperationResult result = c.GetResult();
                Token = result.Entity.ToString();

                PreviousUser   = txUser.Text;
                PreviousPasswd = txPassword.Text;
                Close();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Error",
                                MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }
示例#18
0
        public void Run()
        {
            var data = new UserData
            {
                Version   = "0.1",
                Id        = "1", // id пользователя
                DeviceId  = _deviceId,
                TimeStart = DateTime.Now
            };

            string json = JsonConvert.SerializeObject(data);

            RequestBody body = RequestBody.Create(MediaType.Parse("application/json; charset=utf-8"), json);

            Request request = new Request.Builder()
                              .Url(_ipAddress)
                              .AddHeader("Phone-Action", "hello")
                              .AddHeader("Content-Type", "application/json; charset=utf-8")
                              .Post(body)
                              .Build();

            client.NewCall(request).Enqueue(this);
        }
示例#19
0
        private void btConnect_Click(object sender, EventArgs e)
        {
            try
            {
                treeView.Nodes.Clear();
                Client.Configure(txAddress.Text, int.Parse(txPort.Text), ((4096 * 100) * 1000));
                Client client = new Client();

                RequestBody rb = RequestBody.Create("ServerInfoController", "FullServerInfo");
                client.SendRequest(rb);

                var result     = client.GetResult(typeof(ServerInfo));
                var serverInfo = (ServerInfo)result.Entity;

                lbDescription.Text = $"SocketAppServer, version {serverInfo.ServerVersion}, running on {serverInfo.MachineName}";

                foreach (var controllerInfo in serverInfo.ServerControllers)
                {
                    TreeNode node = new TreeNode(controllerInfo.ControllerName);
                    node.Tag = $"{controllerInfo.ControllerName}";

                    foreach (var action in controllerInfo.ControllerActions)
                    {
                        var child = new TreeNode(action);
                        child.Tag = $"{controllerInfo.ControllerName}:{action}";
                        node.Nodes.Add(child);
                    }

                    treeView.Nodes.Add(node);
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show("Error: \n" + ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }
示例#20
0
        protected override async Task <HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
        {
            var java_uri = request.RequestUri.GetComponents(UriComponents.AbsoluteUri, UriFormat.UriEscaped);
            var url      = new Java.Net.URL(java_uri);

            var body = default(RequestBody);

            if (request.Content != null)
            {
                var bytes = await request.Content.ReadAsByteArrayAsync().ConfigureAwait(false);

                body = RequestBody.Create(MediaType.Parse(request.Content.Headers.ContentType.MediaType), bytes);
            }

            var builder = new Request.Builder()
                          .Method(request.Method.Method.ToUpperInvariant(), body)
                          .Url(url);

            var keyValuePairs = request.Headers
                                .Union(request.Content != null ?
                                       (IEnumerable <KeyValuePair <string, IEnumerable <string> > >)request.Content.Headers :
                                       Enumerable.Empty <KeyValuePair <string, IEnumerable <string> > >());

            foreach (var kvp in keyValuePairs)
            {
                builder.AddHeader(kvp.Key, String.Join(",", kvp.Value));
            }

            cancellationToken.ThrowIfCancellationRequested();

            var rq   = builder.Build();
            var call = client.NewCall(rq);

            cancellationToken.Register(() => call.Cancel());

            var resp = default(Response);

            try {
                resp = await call.EnqueueAsync().ConfigureAwait(false);
            } catch (IOException ex) {
                if (ex.Message.ToLowerInvariant().Contains("canceled"))
                {
                    throw new OperationCanceledException();
                }

                throw;
            }

            var respBody = resp.Body();

            cancellationToken.ThrowIfCancellationRequested();

            var ret = new HttpResponseMessage((HttpStatusCode)resp.Code());

            if (respBody != null)
            {
                var content = new ProgressStreamContent(respBody.ByteStream(), cancellationToken);
                content.Progress = getAndRemoveCallbackFromRegister(request);
                ret.Content      = content;
            }
            else
            {
                ret.Content = new ByteArrayContent(new byte[0]);
            }

            var respHeaders = resp.Headers();

            foreach (var k in respHeaders.Names())
            {
                ret.Headers.TryAddWithoutValidation(k, respHeaders.Get(k));
                ret.Content.Headers.TryAddWithoutValidation(k, respHeaders.Get(k));
            }

            return(ret);
        }
        protected override async Task <HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
        {
            var java_uri = request.RequestUri.GetComponents(UriComponents.AbsoluteUri, UriFormat.UriEscaped);
            var url      = new Java.Net.URL(java_uri);

            var body = default(RequestBody);

            if (request.Content != null)
            {
                var bytes = await request.Content.ReadAsByteArrayAsync().ConfigureAwait(false);

                var contentType = "text/plain";
                if (request.Content.Headers.ContentType != null)
                {
                    contentType = string.Join(" ", request.Content.Headers.GetValues("Content-Type"));
                }
                body = RequestBody.Create(MediaType.Parse(contentType), bytes);
            }

            var requestBuilder = new Request.Builder()
                                 .Method(request.Method.Method.ToUpperInvariant(), body)
                                 .Url(url);

            if (DisableCaching)
            {
                requestBuilder.CacheControl(noCacheCacheControl);
            }

            var keyValuePairs = request.Headers
                                .Union(request.Content != null ?
                                       request.Content.Headers :
                                       Enumerable.Empty <KeyValuePair <string, IEnumerable <string> > >());

            // Add Cookie Header if there's any cookie for the domain in the cookie jar
            var stringBuilder = new StringBuilder();

            if (client.CookieJar() != null)
            {
                var jar     = client.CookieJar();
                var cookies = jar.LoadForRequest(HttpUrl.Get(url));
                foreach (var cookie in cookies)
                {
                    stringBuilder.Append(cookie.Name() + "=" + cookie.Value() + ";");
                }
            }

            foreach (var kvp in keyValuePairs)
            {
                if (kvp.Key == "Cookie")
                {
                    foreach (var val in kvp.Value)
                    {
                        stringBuilder.Append(val + ";");
                    }
                }
                else
                {
                    requestBuilder.AddHeader(kvp.Key, String.Join(getHeaderSeparator(kvp.Key), kvp.Value));
                }
            }

            if (stringBuilder.Length > 0)
            {
                requestBuilder.AddHeader("Cookie", stringBuilder.ToString().TrimEnd(';'));
            }

            if (Timeout != null)
            {
                var clientBuilder = client.NewBuilder();
                var timeout       = (long)Timeout.Value.TotalSeconds;
                clientBuilder.ConnectTimeout(timeout, TimeUnit.Seconds);
                clientBuilder.WriteTimeout(timeout, TimeUnit.Seconds);
                clientBuilder.ReadTimeout(timeout, TimeUnit.Seconds);
                client = clientBuilder.Build();
            }

            cancellationToken.ThrowIfCancellationRequested();

            var rq   = requestBuilder.Build();
            var call = client.NewCall(rq);

            // NB: Even closing a socket must be done off the UI thread. Cray!
            cancellationToken.Register(() => Task.Run(() => call.Cancel()));

            var resp = default(Response);

            try
            {
                resp = await call.EnqueueAsync().ConfigureAwait(false);

                var newReq = resp.Request();
                var newUri = newReq == null ? null : newReq.Url().Uri();
                request.RequestUri = new Uri(newUri.ToString());
                if (throwOnCaptiveNetwork && newUri != null)
                {
                    if (url.Host != newUri.Host)
                    {
                        throw new CaptiveNetworkException(new Uri(java_uri), new Uri(newUri.ToString()));
                    }
                }
            }
            catch (IOException ex)
            {
                if (ex.Message.ToLowerInvariant().Contains("canceled"))
                {
                    throw new System.OperationCanceledException();
                }

                // Calling HttpClient methods should throw .Net Exception when fail #5
                throw new HttpRequestException(ex.Message, ex);
            }

            var respBody = resp.Body();

            cancellationToken.ThrowIfCancellationRequested();

            var ret = new HttpResponseMessage((HttpStatusCode)resp.Code());

            ret.RequestMessage = request;
            ret.ReasonPhrase   = resp.Message();

            // ReasonPhrase is empty under HTTPS #8
            if (string.IsNullOrEmpty(ret.ReasonPhrase))
            {
                try
                {
                    ret.ReasonPhrase = ((ReasonPhrases)resp.Code()).ToString().Replace('_', ' ');
                }
#pragma warning disable 0168
                catch (Exception ex)
                {
                    ret.ReasonPhrase = "Unassigned";
                }
#pragma warning restore 0168
            }

            if (respBody != null)
            {
                var content = new ProgressStreamContent(respBody.ByteStream(), CancellationToken.None);
                content.Progress = getAndRemoveCallbackFromRegister(request);
                ret.Content      = content;
            }
            else
            {
                ret.Content = new ByteArrayContent(new byte[0]);
            }

            var respHeaders = resp.Headers();
            foreach (var k in respHeaders.Names())
            {
                ret.Headers.TryAddWithoutValidation(k, respHeaders.Get(k));
                ret.Content.Headers.TryAddWithoutValidation(k, respHeaders.Get(k));
            }

            return(ret);
        }
示例#22
0
        protected override async Task <HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
        {
            var java_uri = request.RequestUri.GetComponents(UriComponents.AbsoluteUri, UriFormat.UriEscaped);
            var url      = new Java.Net.URL(java_uri);

            var body = default(RequestBody);

            if (request.Content != null)
            {
                var bytes = await request.Content.ReadAsByteArrayAsync().ConfigureAwait(false);

                var contentType = "text/plain";
                if (request.Content.Headers.ContentType != null)
                {
                    contentType = string.Join(" ", request.Content.Headers.GetValues("Content-Type"));
                }
                body = RequestBody.Create(bytes, MediaType.Parse(contentType));
            }

            var requestBuilder = new Request.Builder()
                                 .Method(request.Method.Method.ToUpperInvariant(), body)
                                 .Url(url);

            requestBuilder.CacheControl(_noCacheCacheControl);

            foreach (var kvp in request.Headers)
            {
                requestBuilder.AddHeader(kvp.Key, String.Join(",", kvp.Value));
            }

            cancellationToken.ThrowIfCancellationRequested();

            var rq   = requestBuilder.Build();
            var call = _client.NewCall(rq);

            // NB: Even closing a socket must be done off the UI thread. Cray!
            cancellationToken.Register(() => Task.Run(() => call.Cancel()));

            var resp = default(Response);

            try
            {
                resp = await call.EnqueueAsync().ConfigureAwait(false);

                // 重定向
                //var newReq = resp.Request();
                //var newUri = newReq == null ? null : newReq.Url().Uri();
                //request.RequestUri = new Uri(newUri.ToString());
                //if (throwOnCaptiveNetwork && newUri != null)
                //{
                //    if (url.Host != newUri.Host)
                //    {
                //        throw new CaptiveNetworkException(new Uri(java_uri), new Uri(newUri.ToString()));
                //    }
                //}
            }
            catch (IOException ex)
            {
                if (ex.Message.ToLowerInvariant().Contains("canceled"))
                {
                    throw new System.OperationCanceledException();
                }

                // Calling HttpClient methods should throw .Net Exception when fail #5
                throw new HttpRequestException(ex.Message, ex);
            }

            var respBody = resp.Body();

            cancellationToken.ThrowIfCancellationRequested();

            var ret = new HttpResponseMessage((HttpStatusCode)resp.Code());

            ret.RequestMessage = request;
            ret.ReasonPhrase   = resp.Message();

            // ReasonPhrase is empty under HTTPS #8
            if (string.IsNullOrEmpty(ret.ReasonPhrase))
            {
                try
                {
                    ret.ReasonPhrase = ((ReasonPhrases)resp.Code()).ToString().Replace('_', ' ');
                }
#pragma warning disable 0168
                catch (Exception ex)
                {
                    ret.ReasonPhrase = "Unassigned";
                }
#pragma warning restore 0168
            }

            if (respBody != null)
            {
                var content = new ProgressStreamContent(respBody.ByteStream(), CancellationToken.None);
                content.Progress = GetAndRemoveCallbackFromRegister(request);
                ret.Content      = content;
            }
            else
            {
                ret.Content = new ByteArrayContent(new byte[0]);
            }

            // 响应头
            var respHeaders = resp.Headers();
            foreach (var k in respHeaders.Names())
            {
                ret.Headers.TryAddWithoutValidation(k, respHeaders.Get(k));
                ret.Content.Headers.TryAddWithoutValidation(k, respHeaders.Get(k));
            }

            return(ret);
        }
        protected override async Task <HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
        {
            if (_client == null)
            {
                _client = _builder.Build();
            }

            var javaUri = request.RequestUri.GetComponents(UriComponents.AbsoluteUri, UriFormat.UriEscaped);
            var url     = new Java.Net.URL(javaUri);

            var body = default(RequestBody);

            if (request.Content != null)
            {
                var bytes = await request.Content.ReadAsByteArrayAsync().ConfigureAwait(false);

                var contentType = "text/plain";
                if (request.Content.Headers.ContentType != null)
                {
                    contentType = string.Join(" ", request.Content.Headers.GetValues("Content-Type"));
                }

                body = RequestBody.Create(MediaType.Parse(contentType), bytes);
            }

            var builder = new Request.Builder()
                          .Method(request.Method.Method.ToUpperInvariant(), body)
                          .Url(url);

            var keyValuePairs = request.Headers
                                .Union(request.Content != null ?
                                       request.Content.Headers :
                                       Enumerable.Empty <KeyValuePair <string, IEnumerable <string> > >());

            foreach (var kvp in keyValuePairs)
            {
                var headerSeparator = kvp.Key == "User-Agent" ? " " : ",";
                builder.AddHeader(kvp.Key, string.Join(headerSeparator, kvp.Value));
            }

            cancellationToken.ThrowIfCancellationRequested();

            var rq   = builder.Build();
            var call = _client.NewCall(rq);

            // NB: Even closing a socket must be done off the UI thread. Cray!
            cancellationToken.Register(() => Task.Run(() => call.Cancel()));

            Response resp;

            try
            {
                resp = await call.ExecuteAsync().ConfigureAwait(false);
            }
            catch (IOException ex)
            {
                if (ex.Message != null && ex.Message.StartsWith("Certificate pinning failure!"))
                {
                    throw new WebException(ex.Message, WebExceptionStatus.TrustFailure);
                }
                if (ex.Message != null && ex.Message.ToLowerInvariant().Contains("canceled"))
                {
                    throw new System.OperationCanceledException();
                }
                throw;
            }

            var respBody = resp.Body();

            cancellationToken.ThrowIfCancellationRequested();

            var ret = new HttpResponseMessage((HttpStatusCode)resp.Code())
            {
                RequestMessage = request,
                ReasonPhrase   = resp.Message()
            };

            if (respBody != null)
            {
                ret.Content = new StreamContent(respBody.ByteStream());
            }
            else
            {
                ret.Content = new ByteArrayContent(new byte[0]);
            }

            var respHeaders = resp.Headers();

            foreach (var k in respHeaders.Names())
            {
                ret.Headers.TryAddWithoutValidation(k, respHeaders.Get(k));
                ret.Content.Headers.TryAddWithoutValidation(k, respHeaders.Get(k));
            }

            return(ret);
        }
示例#24
0
        protected override async Task <HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
        {
            var java_uri = request.RequestUri.GetComponents(UriComponents.AbsoluteUri, UriFormat.UriEscaped);
            var url      = new Java.Net.URL(java_uri);

            var body = default(RequestBody);

            if (request.Content != null)
            {
                var bytes = await request.Content.ReadAsByteArrayAsync().ConfigureAwait(false);

                var contentType = "text/plain";
                if (request.Content.Headers.ContentType != null)
                {
                    contentType = String.Join(" ", request.Content.Headers.GetValues("Content-Type"));
                }
                body = RequestBody.Create(MediaType.Parse(contentType), bytes);
            }

            var builder = new Request.Builder()
                          .Method(request.Method.Method.ToUpperInvariant(), body)
                          .Url(url);

            if (DisableCaching)
            {
                builder.CacheControl(noCacheCacheControl);
            }

            var keyValuePairs = request.Headers
                                .Union(request.Content != null ?
                                       (IEnumerable <KeyValuePair <string, IEnumerable <string> > >)request.Content.Headers :
                                       Enumerable.Empty <KeyValuePair <string, IEnumerable <string> > >());

            foreach (var kvp in keyValuePairs)
            {
                builder.AddHeader(kvp.Key, String.Join(getHeaderSeparator(kvp.Key), kvp.Value));
            }

            cancellationToken.ThrowIfCancellationRequested();

            var rq   = builder.Build();
            var call = client.NewCall(rq);

            // NB: Even closing a socket must be done off the UI thread. Cray!
            cancellationToken.Register(() => Task.Run(() => call.Cancel()));

            var resp = default(Response);

            try {
                resp = await call.EnqueueAsync().ConfigureAwait(false);

                var newReq = resp.Request();
                var newUri = newReq == null ? null : newReq.Uri();
                request.RequestUri = new Uri(newUri.ToString());
                if (throwOnCaptiveNetwork && newUri != null)
                {
                    if (url.Host != newUri.Host)
                    {
                        throw new CaptiveNetworkException(new Uri(java_uri), new Uri(newUri.ToString()));
                    }
                }
            } catch (IOException ex) {
                if (ex.Message.ToLowerInvariant().Contains("canceled"))
                {
                    throw new OperationCanceledException();
                }

                throw;
            }

            var respBody = resp.Body();

            cancellationToken.ThrowIfCancellationRequested();

            var ret = new HttpResponseMessage((HttpStatusCode)resp.Code());

            ret.RequestMessage = request;
            ret.ReasonPhrase   = resp.Message();
            if (respBody != null)
            {
                var content = new ProgressStreamContent(respBody.ByteStream(), CancellationToken.None);
                content.Progress = getAndRemoveCallbackFromRegister(request);
                ret.Content      = content;
            }
            else
            {
                ret.Content = new ByteArrayContent(new byte[0]);
            }

            var respHeaders = resp.Headers();

            foreach (var k in respHeaders.Names())
            {
                ret.Headers.TryAddWithoutValidation(k, respHeaders.Get(k));
                ret.Content.Headers.TryAddWithoutValidation(k, respHeaders.Get(k));
            }

            return(ret);
        }
        protected override async Task <HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
        {
            string url = request.RequestUri.ToString();

            var okRequest = new Request.Builder();

            okRequest.Url(url);

            RequestBody requestBody = null;

            foreach (var header in request.Headers)
            {
                okRequest.AddHeader(header.Key, string.Join(" ", header.Value));
            }

            if (request.Content != null)
            {
                /*foreach (var header in request.Content.Headers)
                 * {
                 *  okRequest.AddHeader(header.Key, string.Join(" ", header.Value));
                 * }*/

                var contentType = MediaType.Parse(request.Content.Headers.ContentType?.ToString() ?? "application/octat-stream");

                using (var ms = new System.IO.MemoryStream())
                {
                    var s = await request.Content.ReadAsStreamAsync().ConfigureAwait(false);

                    await s.CopyToAsync(ms).ConfigureAwait(false);

                    requestBody = RequestBody.Create(contentType, ms.ToArray());
                }
            }

            okRequest.Method(request.Method.ToString(), requestBody);

            string cookie = GetCookie(url);

            if (cookie != null)
            {
                okRequest.AddHeader("Cookie", cookie);
            }

            var call = Client.NewCall(okRequest.Build());

            var callBack = new OkHttpCallBack();

            call.Enqueue(callBack);

            var okResponse = await callBack.taskSource.Task.ConfigureAwait(false);

            var response = new HttpResponseMessage();

            response.StatusCode = (System.Net.HttpStatusCode)okResponse.Code();


            List <KeyValuePair <string, string> > contentHeaders = new List <KeyValuePair <string, string> >();

            var rhs = response.Headers;

            var hs    = okResponse.Headers();
            int total = hs.Size();

            for (int i = 0; i < total; i++)
            {
                var name  = hs.Name(i);
                var value = hs.Value(i);

                if (name.EqualsIgnoreCase("Set-Cookie") || name.EqualsIgnoreCase("Set-Cookie2"))
                {
                    Android.Webkit.CookieManager.Instance.SetCookie(url, value);
                    PrefCookieHandler.Default.SetCookie(url, value);
                    cookieCache.Clear();
                }

                //System.Diagnostics.Debug.Write($"Header: {name} = {value}");
                if (!rhs.TryAddWithoutValidation(name, value))
                {
                    contentHeaders.Add(new KeyValuePair <string, string>(name, value));
                }
            }

            var st = okResponse.Body().ByteStream();

            response.Content = new StreamContent(st);
            foreach (var ch in contentHeaders)
            {
                response.Content.Headers.TryAddWithoutValidation(ch.Key, ch.Value);
            }

            //HttpResponseMessage

            return(response);
        }
示例#26
0
        private async void button1_Click(object sender, EventArgs e)
        {
            button1.Enabled = false;
            button1.Text    = "Sending request...";

            var list = ((IEnumerable)dataGrid.DataSource)
                       .Cast <ServerRequestParameter>()
                       .Where(p => !string.IsNullOrEmpty(p.Key))
                       .ToList();
            string controller = txController.Text;
            string action     = txAction.Text;

            if (ckFileResult.Checked)
            {
                DownloadFile(controller, action, list);
                Result = new OperationResult()
                {
                    Status  = 600,
                    Entity  = "",
                    Message = "File saved"
                };
                Close();
                return;
            }

            SaveCache();
            int             chunkSize         = (int)txChunkResponseSize.Value;
            string          responseStorageId = txMemoryStorageId.Text;
            OperationResult res = await Task.Run(() =>
            {
                try
                {
                    Client client  = new Client();
                    RequestBody rb = RequestBody.Create(controller, action);
                    if (!string.IsNullOrEmpty(responseStorageId) &&
                        chunkSize > 0)
                    {
                        rb.SaveOnMemoryStorage(txMemoryStorageId.Text);
                    }
                    foreach (var parameter in list)
                    {
                        rb.AddParameter(parameter.Key, parameter.Value);
                    }
                    rb.AddParameter("authorization", Auth.Token ?? "");

                    client.SendRequest(rb);

                    OperationResult result = (chunkSize == 0
                        ? client.GetResult()
                        : client.GetChunkedResult(chunkSize));
                    ServerResponse = client.Response;
                    return(result);
                }
                catch (Exception ex)
                {
                    MessageBox.Show("Error: \n" + ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    return(null);
                }
            });

            Result = res;
            Close();
        }
示例#27
0
        /// <inheritdoc />
        protected override async Task <HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
        {
            var javaUri = request.RequestUri.GetComponents(UriComponents.AbsoluteUri, UriFormat.UriEscaped);
            var url     = new Java.Net.URL(javaUri);

            var body = default(RequestBody);

            if (request.Content != null)
            {
                var bytes = await request.Content.ReadAsByteArrayAsync().ConfigureAwait(false);

                if (bytes.Length > 0 || request.Method != HttpMethod.Get)
                {
                    var contentType = "text/plain";
                    if (request.Content.Headers.ContentType != null)
                    {
                        contentType = string.Join(" ", request.Content.Headers.GetValues("Content-Type"));
                    }
                    body = RequestBody.Create(bytes, MediaType.Parse(contentType));
                }
            }

            var builder = new Request.Builder()
                          .Method(request.Method.Method.ToUpperInvariant(), body)
                          .Url(url);

            var keyValuePairs = request.Headers
                                .Union(request.Content != null ?
                                       request.Content.Headers :
                                       Enumerable.Empty <KeyValuePair <string, IEnumerable <string> > >());

            foreach (var(name, values) in keyValuePairs)
            {
                var headerSeparator = name == "User-Agent" ? " " : ",";
                builder.AddHeader(name, string.Join(headerSeparator, values));
            }

            cancellationToken.ThrowIfCancellationRequested();

            var rq   = builder.Build();
            var call = _client.Value.NewCall(rq);

            // NB: Even closing a socket must be done off the UI thread. Cray!
            cancellationToken.Register(() => Task.Run(() => call.Cancel()));

            Response resp;

            try
            {
                resp = await call.ExecuteAsync().ConfigureAwait(false);
            }
            catch (Javax.Net.Ssl.SSLException ex)
            {
                throw new HttpRequestException(ex.Message, new AuthenticationException(ex.Message, ex));
            }
            catch (Java.Net.SocketTimeoutException ex)
            {
                throw new TaskCanceledException(ex.Message, ex);
            }
            catch (Java.IO.IOException ex)
            {
                throw new HttpRequestException(ex.Message, ex);
            }

            var respBody = resp.Body();

            cancellationToken.ThrowIfCancellationRequested();

            var ret = new HttpResponseMessage((HttpStatusCode)resp.Code())
            {
                RequestMessage = request,
                ReasonPhrase   = resp.Message()
            };

            ret.RequestMessage.RequestUri = new Uri(resp.Request().Url().Url().ToString()); // should point to the request leading to the final response (in case of redirects)

            if (respBody != null)
            {
                ret.Content = new StreamContent(respBody.ByteStream());
            }
            else
            {
                ret.Content = new ByteArrayContent(new byte[0]);
            }

            foreach (var(name, values) in resp.Headers().ToMultimap())
            {
                // special handling for Set-Cookie because folding them into one header is strongly discouraged.
                // but adding them just folds them again so this is no option at the moment
                ret.Headers.TryAddWithoutValidation(name, values);
                ret.Content.Headers.TryAddWithoutValidation(name, values);
            }

            return(ret);
        }
示例#28
0
        /// <summary>
        /// 执行上传
        /// </summary>
        /// <param name="p_uploadFiles">待上传文件</param>
        /// <param name="p_fixedvolume">要上传的固定卷名,null表示上传到普通卷</param>
        /// <param name="p_tokenSource">取消上传的令牌,不负责释放</param>
        /// <returns></returns>
        public static async Task <List <string> > Send(IList <FileData> p_uploadFiles, string p_fixedvolume, CancellationTokenSource p_tokenSource)
        {
            // 列表内容不可为null
            if (p_uploadFiles == null ||
                p_uploadFiles.Count == 0 ||
                p_uploadFiles.Contains(null))
            {
                return(null);
            }

            var bodyBuilder = new MultipartBody.Builder().SetType(MultipartBody.Form);

            if (!string.IsNullOrEmpty(p_fixedvolume))
            {
                // 固定上传路径放在最前
                bodyBuilder.AddFormDataPart("fixedvolume", p_fixedvolume);
            }

            foreach (var uf in p_uploadFiles)
            {
                Java.IO.File file = new Java.IO.File(uf.FilePath);
                RequestBody  rb   = RequestBody.Create(file, MediaType.Parse("application/octet-stream"));
                // 包一层实现进度
                ProgressRequestBody progress = new ProgressRequestBody(rb, ((IUploadUI)uf.UploadUI).UploadProgress);
                bodyBuilder.AddFormDataPart(uf.Desc, uf.FileName, progress);

                // 含缩略图
                if (!string.IsNullOrEmpty(uf.ThumbPath))
                {
                    var thumbFile = new Java.IO.File(uf.ThumbPath);
                    var thumb     = RequestBody.Create(thumbFile, MediaType.Parse("application/octet-stream"));
                    bodyBuilder.AddFormDataPart("thumbnail", "thumbnail.jpg", thumb);
                }
            }
            RequestBody body = bodyBuilder.Build();

            var request = new Request.Builder()
                          .Post(body)
                          .Url($"{Kit.Stub.ServerUrl.TrimEnd('/')}/fsm/.u");

            if (Kit.IsLogon)
            {
                request.Header("uid", Kit.UserID.ToString());
            }

            var call = _client.NewCall(request.Build());

            p_tokenSource.Token.Register(() => Task.Run(() => call.Cancel()));
            _tokenSource = p_tokenSource;

            Response resp;

            try
            {
                resp = await call.EnqueueAsync().ConfigureAwait(false);
            }
            catch
            {
                return(null);
            }
            finally
            {
                _tokenSource = null;
            }

            var result = resp.Body().Bytes();

            if (result == null || result.Length == 0)
            {
                return(null);
            }
            return(ParseResult(result));
        }
示例#29
0
 private static RequestBody GetBody(INetActionConfig action)
 {
     return(RequestBody.Create(MediaType.Parse(action.PayloadType),
                               JsonConvert.SerializeObject(action.Payload)));
 }