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)); }
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); }
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); }
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()); }
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; } })); }
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(); }
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; } })); }
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); } } }
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); }
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); } }
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)); }
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); }
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 { } }
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(); } }
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); } }
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); }
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); } }
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); }
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); }
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); }
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(); }
/// <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); }
/// <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)); }
private static RequestBody GetBody(INetActionConfig action) { return(RequestBody.Create(MediaType.Parse(action.PayloadType), JsonConvert.SerializeObject(action.Payload))); }