protected override async Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken) { #if XAMARIN_MODERN Volatile.Write (ref sentRequest, true); #endif var headers = request.Headers as IEnumerable<KeyValuePair<string, IEnumerable<string>>>; var ms = new MemoryStream(); if (request.Content != null) { await request.Content.CopyToAsync(ms).ConfigureAwait(false); headers = headers.Union(request.Content.Headers).ToArray(); } var rq = new NSMutableUrlRequest() { AllowsCellularAccess = true, Body = NSData.FromArray(ms.ToArray()), CachePolicy = (!this.DisableCaching ? NSUrlRequestCachePolicy.UseProtocolCachePolicy : NSUrlRequestCachePolicy.ReloadIgnoringCacheData), Headers = headers.Aggregate(new NSMutableDictionary(), (acc, x) => { acc.Add(new NSString(x.Key), new NSString(String.Join(getHeaderSeparator(x.Key), x.Value))); return acc; }), HttpMethod = request.Method.ToString().ToUpperInvariant(), Url = NSUrl.FromString(request.RequestUri.AbsoluteUri), }; var op = session.CreateDataTask(rq); cancellationToken.ThrowIfCancellationRequested(); var ret = new TaskCompletionSource<HttpResponseMessage>(); cancellationToken.Register(() => ret.TrySetCanceled()); lock (inflightRequests) { inflightRequests[op] = new InflightOperation() { FutureResponse = ret, Request = request, #if !XAMARIN_MODERN Progress = getAndRemoveCallbackFromRegister(request), #endif ResponseBody = new ByteArrayListStream(), CancellationToken = cancellationToken, }; } op.Resume(); return await ret.Task.ConfigureAwait(false); }
private void LoadAlbumInformation () { var albumUrlPath = "http://api.dribbble.com/" + _apiPath; // Nimbus processors allow us to perform complex computations on a separate thread before // returning the object to the main thread. This is useful here because we perform sorting // operations and pruning on the results. var url = new NSUrl (albumUrlPath); var request = new NSMutableUrlRequest (url); // public delegate void ImageRequestOperationWithRequestSuccess1(UIImage image); // public delegate void ImageRequestOperationWithRequestSuccess2(NSUrlRequest request, NSHttpUrlResponse response, UIImage image); // public delegate void ImageRequestOperationWithRequestFailure(NSUrlRequest request, NSHttpUrlResponse response, NSError error); // public delegate UIImage ImageRequestOperationWithRequestProcessingBlock(UIImage image); // public delegate void AFJSONRequestOperationJsonRequestOperationWithRequestSuccess(NSUrlRequest request, NSHttpUrlResponse response, NSObject json); // public delegate void AFJSONRequestOperationJsonRequestOperationWithRequestFailure(NSUrlRequest request, NSHttpUrlResponse response, NSError error, NSObject json); // [BaseType (typeof (AFHTTPRequestOperation))] var albumRequest = AFJSONRequestOperation.JsonRequestOperationWithRequest (request, (req, res, json) => { BlockForAlbumProcessing (req, res, (NSDictionary)json); }, (req, resp, error, json) => { Console.WriteLine ("Error"); }); Queue.AddOperation (albumRequest); }
/// <summary> /// Create a new instance of NativeRequest, add the headers to the request /// </summary> /// <param name="url"></param> /// <returns></returns> public static NSMutableUrlRequest CreateNativeRequest(string url) { var request = new NSMutableUrlRequest(); if (url == null) { Logger.Logg("Empty URL, could not create NSUrl"); } else { NSUrl nsurl = NSUrl.FromString(url); request = new NSMutableUrlRequest(nsurl); if (url.Contains(AppContext.Domain)) { if (Session.LoggedIn) { request["Cookie"] = Session.CookieJar.ToString(); request["ApiKey"] = AppContext.ApiKey; } } //If we have a IDporten cookie we add that as well (increased performance) if (Session.IDPortenCookie != null) { request["IDPSecurityPortal"] = Session.IDPortenCookie.Value; } } return request; }
public void UploadStream (string url, long content_length, Action completed) { if (url == null) throw new ArgumentNullException ("url"); AddHeader ("Expect", "100-continue"); AddHeader ("Content-Type", "application/octet-stream"); AddHeader ("Content-Length", content_length.ToString ()); InvokeOnMainThread (delegate { try { request = CreateNativePostRequest (url, content_length); } catch (Exception e) { Console.WriteLine ("Exception uploading stream"); Console.WriteLine (e); completed (); return; } url_connection = NSUrlConnection.FromRequest (request, new NativeUrlDelegate ((body) => { completed (); request.Dispose (); }, (reason) => { Console.WriteLine ("upload failed: " + reason); completed (); })); }); }
public void Open(string url, string protocol = null, string authToken = null) { try { if (_client != null) Close(); NSUrlRequest req = new NSUrlRequest(new NSUrl(url)); if (!string.IsNullOrEmpty(authToken)) { NSMutableUrlRequest mutableRequest = new NSMutableUrlRequest(new NSUrl(url)); mutableRequest["Authorization"] = authToken; req = (NSUrlRequest)mutableRequest.Copy(); } if (string.IsNullOrEmpty(protocol)) _client = new WebSocket(req); else _client = new WebSocket(req, new NSObject[] { new NSString(protocol) }); _client.ReceivedMessage += _client_ReceivedMessage; _client.WebSocketClosed += _client_WebSocketClosed; _client.WebSocketFailed += _client_WebSocketFailed; _client.WebSocketOpened += _client_WebSocketOpened; _client.Open(); } catch (Exception ex) { OnError(ex.Message); } }
void loadURL(string url) { var nsurl = new NSUrl(url); var request = new NSMutableUrlRequest(nsurl); /* 20100603 10:2 ���߂��� request.Headers = new NSDictionary(); request.Headers[new NSString("User-Agent")] = new NSString("SomeOne/1.0"); request.Headers[new NSString("User_Agent")] = new NSString("SomeOne/1.0"); */ /** 20100603 10:16 �_������ Selector selSetValueForHttpHeaderField = new Selector("setValue:forHTTPHeaderField:"); Messaging.void_objc_msgSend_IntPtr_IntPtr(request.Handle, selSetValueForHttpHeaderField.Handle, new NSString("My-Special-Agent/1.0").Handle, new NSString("User-Agent").Handle); */ /* 20100602 ���߂��� Selector selSetValueForHttpHeaderField = new Selector("setValue:forHTTPHeaderField:"); // Set the User_Agent HTTP Header Messaging.void_objc_msgSend_IntPtr_IntPtr(request.Handle, selSetValueForHttpHeaderField.Handle, new NSString("Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US) AppleWebKit/532.0 (KHTML, like Gecko) Chrome/3.0.195.38 Safari/532.0").Handle, new NSString("User_Agent").Handle); Messaging.void_objc_msgSend_IntPtr_IntPtr(request.Handle, selSetValueForHttpHeaderField.Handle, new NSString("Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US) AppleWebKit/532.0 (KHTML, like Gecko) Chrome/3.0.195.38 Safari/532.0").Handle, new NSString("User-Agent").Handle); Messaging.void_objc_msgSend_IntPtr_IntPtr(request.Handle, selSetValueForHttpHeaderField.Handle, new NSString("Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US) AppleWebKit/532.0 (KHTML, like Gecko) Chrome/3.0.195.38 Safari/532.0").Handle, new NSString("userAgent").Handle); Messaging.void_objc_msgSend_IntPtr_IntPtr(request.Handle, selSetValueForHttpHeaderField.Handle, new NSString("Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US) AppleWebKit/532.0 (KHTML, like Gecko) Chrome/3.0.195.38 Safari/532.0").Handle, new NSString("user_agent").Handle); Messaging.void_objc_msgSend_IntPtr_IntPtr(request.Handle, selSetValueForHttpHeaderField.Handle, new NSString("Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US) AppleWebKit/532.0 (KHTML, like Gecko) Chrome/3.0.195.38 Safari/532.0").Handle, new NSString("user-agent").Handle); */ //request["User_Agent"] = "Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US) AppleWebKit/532.0 (KHTML, like Gecko) Chrome/3.0.195.38 Safari/532.0"; //request._SetValue("User_Agent", "Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US) AppleWebKit/532.0 (KHTML, like Gecko) Chrome/3.0.195.38 Safari/532.0"); //request.Headers = new NSDictionary(); //request.Headers[new NSString("User_Agent")] = new NSString("Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US) AppleWebKit/532.0 (KHTML, like Gecko) Chrome/3.0.195.38 Safari/532.0"); _browser.LoadRequest(request); }
public static void Launch (string url, bool callbackOnMainThread, Action<string> callback) { Util.PushNetworkActive (); Uri uri = new Uri (url); Util.Log(uri.OriginalString); // Wake up 3G if it has been more than 3 minutes lock (minuteLock){ var nowTicks = DateTime.UtcNow.Ticks; if (nowTicks-lastLaunchTick > TimeSpan.TicksPerMinute*3) MonoTouch.ObjCRuntime.Runtime.StartWWAN (uri); lastLaunchTick = nowTicks; } var req = new NSMutableUrlRequest(new NSUrl(url), NSUrlRequestCachePolicy.ReloadIgnoringCacheData,5); //req["User-Agent"]=_UserAgent; var mydelegate = new EscozUrlDelegate(url,(result)=> { try { lock (queue) pending--; Util.PopNetworkActive (); if (callbackOnMainThread) invoker.BeginInvokeOnMainThread (delegate { callback(result); }); else callback(result); } catch (Exception e){ Util.LogException ("Launch", e); } lock (queue){ if (queue.Count > 0){ var nextRequest = queue.Dequeue (); Launch (nextRequest.Url, nextRequest.CallbackOnMainThread, nextRequest.Callback); } } }); //new NSUrlConnectionWrapper(req, mydelegate); invoker.BeginInvokeOnMainThread(()=> { new NSUrlConnection(req, mydelegate, true); }); }
public static void ApplyHeadersTo(NSMutableUrlRequest mutableRequest) { if (!mutableRequest.Headers.ContainsKey(new NSString(BrokerConstants.ChallengeHeaderKey))) { mutableRequest[BrokerConstants.ChallengeHeaderKey] = BrokerConstants.ChallengeHeaderValue; } if (AdditionalHeaders!=null) { foreach (var key in AdditionalHeaders.Keys) { mutableRequest.Headers[new NSString(key)] = new NSString(AdditionalHeaders[key]); } AdditionalHeaders = null; } }
private static RxTerm RxTermViaNSURLConnectionAsync(string rxcui, Action <RxTerm> callback = null) { var rxTerm = new RxTerm(); try { var request = new NSMutableUrlRequest(new NSUrl(string.Format("http://rxnav.nlm.nih.gov/REST/RxTerms/rxcui/{0}/allinfo", rxcui)), NSUrlRequestCachePolicy.ReloadRevalidatingCacheData, 20); request["Accept"] = "application/json"; var connectionDelegate = new RxTermNSURLConnectionDelegate(); var connection = new NSUrlConnection(request, connectionDelegate); connection.Start(); } catch (Exception ex) { Console.WriteLine("Problem getting data for concept: {0} -- Exception: {1}", rxcui, ex.Message + ex.StackTrace); } return(rxTerm); }
Task<bool> SendData (NSUrl url, string uploadData) { var tcs = new TaskCompletionSource<bool> (); var request = new NSMutableUrlRequest (url); request.HttpMethod = "POST"; var rv = NSUrlSession.SharedSession.CreateUploadTask (request, NSData.FromString (uploadData), (NSData data, NSUrlResponse response, NSError error) => { if (error != null) { Console.WriteLine ("Failed to send data to {0}: {1}", url.AbsoluteString, error); tcs.SetResult (false); } else { //Console.WriteLine ("Succeeded sending data to {0}", url.AbsoluteString); tcs.SetResult (true); } }); rv.Resume (); return tcs.Task; }
private void NavigateTo3DSPage() { _webView.Hidden = false; _webView.LoadError -= WebView_LoadError; _webView.LoadError += WebView_LoadError; var request = new NSMutableUrlRequest(new NSUrl(_3dsUrl)); request.HttpMethod = "POST"; request.Body = NSData.FromString(_postContent.ReadAsStringAsync().Result); request["Content-Length"] = request.Body.Length.ToString(); foreach (var kv in _postContent.Headers) { request[kv.Key] = string.Join(" ", kv.Value); } _webView.LoadRequest(request); }
/// <summary> /// Attaches a TLS certificate to be used for encryption of connection. /// </summary> /// <param name="url">The server url</param> /// <param name="nsUrlRequest">The url request to encrypt</param> private void AttachCertificate(string url, NSMutableUrlRequest nsUrlRequest) { if (url.ToLower().Contains("raincloud223.aquamonix.com.au")) { var certPath = NSBundle.MainBundle.PathForResource(RaincloudCertName, RaincloudCertType); //var certData = NSData.FromFile(certPath); //Security.SecCertificate secCert = //var certDataRef = (CFDataRef)certData; var cert = new Security.SecCertificate(new System.Security.Cryptography.X509Certificates.X509Certificate2(System.IO.File.ReadAllBytes(certPath))); //var certPtr = SecCertificateCopyData(cert.Handle); nsUrlRequest.SetSSLPinnedCertificates(new NSObject[] { ObjCRuntime.Runtime.GetNSObject(cert.Handle) }); } else { var certPath = NSBundle.MainBundle.PathForResource(DefaultCertName, DefaultCertType); var cert = new Security.SecCertificate(System.Security.Cryptography.X509Certificates.X509Certificate2.CreateFromCertFile(certPath)); nsUrlRequest.SetSSLPinnedCertificates(new NSObject[] { ObjCRuntime.Runtime.GetNSObject(cert.Handle) }); } }
protected override void OnElementChanged(VisualElementChangedEventArgs e) { base.OnElementChanged(e); if (NativeView != null) { var mywebview = Element as PayWebView; var request = new NSMutableUrlRequest(new NSUrl(new NSString(mywebview.url))); request.Body = mywebview.PostData; request.HttpMethod = "POST"; NSMutableDictionary dic = new NSMutableDictionary(); dic.Add(new NSString("Content-Type"), new NSString("application/json")); request.Headers = dic; LoadRequest(request); } }
public static NSMutableUrlRequest ToNative(this HttpTransferRequest request) { var url = NSUrl.FromString(request.Uri); var native = new NSMutableUrlRequest(url) { HttpMethod = request.HttpMethod.Method, AllowsCellularAccess = request.UseMeteredConnection, }; if (request.Headers.Any()) { native.Headers = NSDictionary.FromObjectsAndKeys( request.Headers.Values.ToArray(), request.Headers.Keys.ToArray() ); } return(native); }
private void PubliceRequestMethod(NSMutableUrlRequest request) { NSError err; // 设置header NSMutableDictionary header = new NSMutableDictionary(); header.SetValueForKey((NSString)"application/json; charset=utf-8", (NSString)"Content-Type"); request.Headers = header; NSUrlSession session = NSUrlSession.FromConfiguration(NSUrlSessionConfiguration.DefaultSessionConfiguration, (INSUrlSessionDelegate)this, NSOperationQueue.CurrentQueue); NSUrlSessionDataTask task = session.CreateDataTask(request, (data, response, error) => { if (error != null) { Console.WriteLine(error.Description); } else { NSHttpUrlResponse resp = (NSHttpUrlResponse)response; NSDictionary dicData = (NSDictionary)NSJsonSerialization.Deserialize(data, NSJsonReadingOptions.MutableLeaves, out err); if (dicData == null) { return; } NSObject code = dicData.ValueForKey((NSString)"code"); if (resp.StatusCode == 200 && code.ToString().Equals("0")) { NetworkHelperRDelegate(dicData, resp, null); Console.WriteLine(resp.Description); } else { NetworkHelperRDelegate(dicData, resp, err); string message = dicData.ValueForKey((NSString)"message").ToString(); Console.WriteLine(dicData.Description); } } }); task.Resume(); }
protected virtual NSUrlRequest CreateRequest(TaskConfiguration config) { var url = NSUrl.FromString(config.Uri); var request = new NSMutableUrlRequest(url) { HttpMethod = config.HttpMethod, AllowsCellularAccess = config.UseMeteredConnection }; if (!String.IsNullOrWhiteSpace(config.PostData)) { request.Body = NSData.FromString(config.PostData); } var headerDictionary = NSDictionary.FromObjectsAndKeys(config.Headers.Values.ToArray(), config.Headers.Keys.ToArray()); request.Headers = headerDictionary; return(request); }
void NSUrlSessionButton_TouchUpInside(object sender, EventArgs args) { NSUrlSessionConfiguration sessionConfig = NSUrlSessionConfiguration.DefaultSessionConfiguration; sessionConfig.AllowsCellularAccess = true; sessionConfig.TimeoutIntervalForRequest = 30.0; sessionConfig.TimeoutIntervalForResource = 60.0; sessionConfig.HttpMaximumConnectionsPerHost = 1; NSUrl url = NSUrl.FromString(URLRequestBin); NSMutableUrlRequest urlRequest = new NSMutableUrlRequest(url, NSUrlRequestCachePolicy.ReloadIgnoringLocalCacheData, 60.0); urlRequest.HttpMethod = "POST"; urlRequest.Body = NSData.FromString("data=This is some NSURLSession data"); NSUrlSession session = NSUrlSession.FromConfiguration(sessionConfig); NSUrlSessionDataTask dataTask = session.CreateDataTask(urlRequest); dataTask.Resume(); }
protected override void Dispose (bool disposing) { if (url_connection != null) { url_connection.Dispose (); url_connection = null; } if (request != null) { request.BodyStream = null; request.Dispose (); request = null; } if (random_input_stream != null) { random_input_stream.Dispose (); random_input_stream = null; } base.Dispose (disposing); }
protected override async Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken) { var headers = request.Headers as IEnumerable<KeyValuePair<string, IEnumerable<string>>>; var ms = new MemoryStream(); if (request.Content != null) { await request.Content.CopyToAsync(ms).ConfigureAwait(false); headers = headers.Union(request.Content.Headers).ToArray(); } var rq = new NSMutableUrlRequest() { AllowsCellularAccess = true, Body = NSData.FromArray(ms.ToArray()), CachePolicy = NSUrlRequestCachePolicy.UseProtocolCachePolicy, Headers = headers.Aggregate(new NSMutableDictionary(), (acc, x) => { acc.Add(new NSString(x.Key), new NSString(x.Value.LastOrDefault())); return acc; }), HttpMethod = request.Method.ToString().ToUpperInvariant(), Url = NSUrl.FromString(request.RequestUri.AbsoluteUri), }; var op = session.CreateDataTask(rq); cancellationToken.ThrowIfCancellationRequested(); var ret = new TaskCompletionSource<HttpResponseMessage>(); cancellationToken.Register(() => ret.TrySetCanceled()); lock (inflightRequests) { inflightRequests[op] = new InflightOperation() { FutureResponse = ret, Request = request, ResponseBody = new ByteArrayListStream(), CancellationToken = cancellationToken, }; } op.Resume(); return await ret.Task.ConfigureAwait(false); }
public void Open(string url, string protocol, IDictionary <string, string> headers = null) { try { if (_client != null) { Close(); } NSUrlRequest req = new NSUrlRequest(new NSUrl(url)); if (headers?.Count > 0) { NSMutableUrlRequest mutableRequest = new NSMutableUrlRequest(new NSUrl(url)); foreach (var header in headers) { mutableRequest[header.Key] = header.Value; } req = (NSUrlRequest)mutableRequest.Copy(); } if (string.IsNullOrEmpty(protocol)) { _client = new WebSocket(req); } else { _client = new WebSocket(req, new NSObject[] { new NSString(protocol) }); } _client.ReceivedMessage += _client_ReceivedMessage; _client.WebSocketClosed += _client_WebSocketClosed; _client.WebSocketFailed += _client_WebSocketFailed; _client.WebSocketOpened += _client_WebSocketOpened; _client.Open(); } catch (Exception ex) { OnError(ex); } }
internal static void SummonThreeDSecure(PaymentRequiresThreeDSecureModel threedDSecureReceipt, SecureWebView secureWebView) { secureWebView.ReceiptID = threedDSecureReceipt.ReceiptId; NSCharacterSet allowedCharecterSet = NSCharacterSet.FromString(@":/=,!$&'()*+;[]@#?").InvertedSet; NSString paReq = new NSString(threedDSecureReceipt.PaReq); var encodedPaReq = paReq.CreateStringByAddingPercentEncoding(allowedCharecterSet); NSString termUrl = new NSString("judo1234567890://threedsecurecallback"); var encodedTermUrl = termUrl.CreateStringByAddingPercentEncoding(allowedCharecterSet); NSUrl url = new NSUrl(threedDSecureReceipt.AcsUrl); NSMutableUrlRequest req = new NSMutableUrlRequest(url); NSString postString = new NSString("MD=" + threedDSecureReceipt.Md + "&PaReq=" + encodedPaReq + "&TermUrl=" + encodedTermUrl + ""); NSData postData = postString.Encode(NSStringEncoding.UTF8); req.HttpMethod = "POST"; req.Body = postData; try { DispatchQueue.MainQueue.DispatchAfter(DispatchTime.Now, () => { secureWebView.LoadRequest(req); LoadingScreen.HideLoading(); secureWebView.Hidden = false; }); } catch (Exception e) { if (secureWebView._failureCallback != null) { var judoError = new JudoError { Exception = e }; secureWebView.CloseView(); secureWebView._failureCallback(judoError); } } }
NSMutableUrlRequest CreateNativePostRequest (string url, long content_length) { NSUrl nsurl = NSUrl.FromString (url); if (nsurl == null) throw new Exception ("Invalid upload URL, could not create NSUrl from: '" + url + "'."); NSMutableUrlRequest request = new NSMutableUrlRequest (nsurl); request.HttpMethod = "POST"; random_input_stream = new ZInputStream (content_length); request.BodyStream = random_input_stream; if (headers != null) { foreach (var header in headers) request [header.Key] = header.Value; } return request; }
private void LoadInternetContent() { if (Control == null || Element == null) { return; } var headers = new NSMutableDictionary(); Element.LocalRegisteredHeaders .Concat(HybridWebViewControl.GlobalRegisteredHeaders.Where(_ => Element.EnableGlobalHeaders)) .Where(header => !headers.ContainsKey((NSString)header.Key)) .ForEach(header => headers.Add((NSString)header.Key, (NSString)header.Value)); var url = new NSUrl(Element.Source); var request = new NSMutableUrlRequest(url) { Headers = headers }; Control.LoadRequest(request); }
private void LoadMessageBody(UAInboxMessage message) { var request = new NSMutableUrlRequest(message.MessageBodyURL); UAMessageCenter.Shared.User.GetUserData((UAUserData userData) => { if (userData == null) { return; } var auth = UAUtils.AuthHeaderString(userData.Username, userData.Password); NSMutableDictionary dict = new NSMutableDictionary(); dict.Add(new NSString("Authorization"), new NSString(auth)); request.Headers = dict; webView.LoadRequest(request); messagePage.OnRendererLoadStarted(messageId); }); }
/// <summary> /// Crea consulta rest. /// </summary> /// <returns>Request.</returns> /// <param name="uri">URI data.</param> private NSMutableUrlRequest CreateRequest(URIData uri) { // Convierto a UTF8 string converted = ((NSString)(url + uri.Url)).CreateStringByAddingPercentEscapes(NSStringEncoding.UTF8); // Method NSMutableUrlRequest request = new NSMutableUrlRequest(NSUrl.FromString(converted)) { HttpMethod = uri.GetMethod() }; // Accept if (uri.GetAccept() != null) { request["Accept"] = uri.GetAccept(); } // Content-Type if (uri.GetContentType() != null) { request["Content-Type"] = uri.GetContentType(); } // Authorization if (uri.Auth != 0) { request["Authorization"] = token; } // Body if (uri.Body != null) { request.Body = uri.Body; } // Devuelvo request return(request); }
async Task <NSUrlRequest> CreateRequest(HttpRequestMessage request) { var stream = Stream.Null; var headers = request.Headers as IEnumerable <KeyValuePair <string, IEnumerable <string> > >; if (request.Content != null) { stream = await request.Content.ReadAsStreamAsync().ConfigureAwait(false); headers = headers.Union(request.Content.Headers).ToArray(); } var nsrequest = new NSMutableUrlRequest { AllowsCellularAccess = true, CachePolicy = DisableCaching ? NSUrlRequestCachePolicy.ReloadIgnoringCacheData : NSUrlRequestCachePolicy.UseProtocolCachePolicy, HttpMethod = request.Method.ToString().ToUpperInvariant(), Url = NSUrl.FromString(request.RequestUri.AbsoluteUri), Headers = headers.Aggregate(new NSMutableDictionary(), (acc, x) => { acc.Add(new NSString(x.Key), new NSString(string.Join(GetHeaderSeparator(x.Key), x.Value))); return(acc); }) }; if (stream != Stream.Null) { // HttpContent.TryComputeLength is `protected internal` :-( but it's indirectly called by headers var length = request.Content.Headers.ContentLength; if (length.HasValue && (length <= MaxInputInMemory)) { nsrequest.Body = NSData.FromStream(stream); } else { nsrequest.BodyStream = new WrappedNSInputStream(stream); } } return(nsrequest); }
void LoadInternetContent() { if (Control == null || Element == null) { return; } var headers = new NSMutableDictionary(); foreach (var header in Element.LocalRegisteredHeaders) { var key = new NSString(header.Key); if (!headers.ContainsKey(key)) { headers.Add(key, new NSString(header.Value)); } } if (Element.EnableGlobalHeaders) { foreach (var header in FormsWebView.GlobalRegisteredHeaders) { var key = new NSString(header.Key); if (!headers.ContainsKey(key)) { headers.Add(key, new NSString(header.Value)); } } } var url = new NSUrl(Element.Source); var request = new NSMutableUrlRequest(url) { Headers = headers }; Control.LoadRequest(request); }
public void Open(string url, string protocol = null, string authToken = null) { try { if (_client != null) { Close(); } NSUrlRequest req = new NSUrlRequest(new NSUrl(url)); if (!string.IsNullOrEmpty(authToken)) { NSMutableUrlRequest mutableRequest = new NSMutableUrlRequest(new NSUrl(url)); mutableRequest["Authorization"] = authToken; req = (NSUrlRequest)mutableRequest.Copy(); } if (string.IsNullOrEmpty(protocol)) { _client = new WebSocket(req); } else { _client = new WebSocket(req, new NSObject[] { new NSString(protocol) }); } _client.ReceivedMessage += _client_ReceivedMessage; _client.WebSocketClosed += _client_WebSocketClosed; _client.WebSocketFailed += _client_WebSocketFailed; _client.WebSocketOpened += _client_WebSocketOpened; _client.Open(); } catch (Exception ex) { OnError(ex.Message); } }
public void StartDownload(NSUrlSession session, bool allowsCellularAccess) { using (var downloadUrl = NSUrl.FromString(Url)) using (var request = new NSMutableUrlRequest(downloadUrl)) { if (Headers != null) { var headers = new NSMutableDictionary(); foreach (var header in Headers) { headers.SetValueForKey( new NSString(header.Value), new NSString(header.Key) ); } request.Headers = headers; } request.AllowsCellularAccess = allowsCellularAccess; Task = session.CreateDownloadTask(request); Task.Resume(); } }
void StartDownload(NSUrl url, WebViewAction target) { if (!owner.eventsHandler.OnStartDownload(url)) { return; } UrlSessionDelegate @delegate = new UrlSessionDelegate() { owner = owner }; @delegate.session = NSUrlSession.FromConfiguration( NSUrlSessionConfiguration.DefaultSessionConfiguration, (INSUrlSessionDelegate)@delegate, null); var request = new NSMutableUrlRequest(url); if (target.MimeType != null) { request["Accept"] = target.MimeType; } @delegate.task = @delegate.session.CreateDownloadTask(request); @delegate.task.Resume(); }
protected override void Dispose(bool disposing) { if (url_connection != null) { url_connection.Dispose(); url_connection = null; } if (request != null) { request.BodyStream = null; request.Dispose(); request = null; } if (random_input_stream != null) { random_input_stream.Dispose(); random_input_stream = null; } base.Dispose(disposing); }
protected virtual NSUrlRequest CreateRequest(TaskConfiguration config) { var url = NSUrl.FromString(config.Uri); var request = new NSMutableUrlRequest(url) { HttpMethod = config.HttpMethod, AllowsCellularAccess = config.UseMeteredConnection }; if (!String.IsNullOrWhiteSpace(config.PostData)) { request.Body = NSData.FromString(config.PostData); } foreach (var header in config.Headers) { request.Headers.SetValueForKey( new NSString(header.Value), new NSString(header.Key) ); } return(request); }
Task <bool> SendData(NSUrl url, string uploadData) { var tcs = new TaskCompletionSource <bool> (); var request = new NSMutableUrlRequest(url); request.HttpMethod = "POST"; var rv = NSUrlSession.SharedSession.CreateUploadTask(request, NSData.FromString(uploadData), (NSData data, NSUrlResponse response, NSError error) => { if (error != null) { Console.WriteLine("Failed to send data to {0}: {1}", url.AbsoluteString, error); tcs.SetResult(false); } else { //Console.WriteLine ("Succeeded sending data to {0}", url.AbsoluteString); tcs.SetResult(true); } }); rv.Resume(); return(tcs.Task); }
public override void Execute(FormDialogViewController controller, Element element, Action completed) { controller.SetValue("temperature", ""); controller.SetValue("humidity", ""); controller.SetValue("windspeed", ""); var request = new NSMutableUrlRequest(new NSUrl("http://ws.geonames.org/weatherIcaoJSON?ICAO=KORD"), NSUrlRequestCachePolicy.ReloadIgnoringLocalAndRemoteCacheData, 10); new UrlConnection("weather", request, (result) => { var json = JsonObject.Parse(result); var weather = json["weatherObservation"]; controller.SetValue("temperature", weather["temperature"].CleanString() + " celsius"); controller.SetValue("humidity", weather["humidity"].CleanString() + "%"); controller.SetValue("windspeed", weather["windSpeed"].CleanString() + " km/h"); controller.Reload(); completed(); }, (error) => { controller.NetworkFailed(error); completed(); }); }
void HandleSelectUpload(object sender, UIButtonEventArgs args) { this.sheet.Dismissed -= this.HandleSelectUpload; this.sheet = null; string localFilename = args.ButtonIndex <= 3 ? GetLocalPathForImage(args.ButtonIndex + 1) : null; var filename = Path.GetFileName(localFilename); var hostUrl = NSUrl.FromString($"http://{AppDelegate.HOST_ADDRESS}:{AppDelegate.HOST_PORT}/{filename}"); Console.WriteLine($"Host URL: {hostUrl}"); var request = new NSMutableUrlRequest(hostUrl) { HttpMethod = "PUT" }; var keys = new object[] { "Content-Type" }; var objects = new object[] { "image/png" }; request.Headers = NSDictionary.FromObjectsAndKeys(objects, keys); this.Manager.CreateFileUpload(request, localFilename); }
public override void Execute (FormDialogViewController controller, Element element, Action completed) { controller.SetValue("temperature", ""); controller.SetValue("humidity", ""); controller.SetValue("windspeed", ""); var request = new NSMutableUrlRequest(new NSUrl("http://ws.geonames.org/weatherIcaoJSON?ICAO=KORD"), NSUrlRequestCachePolicy.ReloadIgnoringLocalAndRemoteCacheData, 10); new UrlConnection("weather", request, (result)=>{ var json = JsonObject.Parse(result); var weather = json["weatherObservation"]; controller.SetValue("temperature", weather["temperature"].CleanString()+ " celsius"); controller.SetValue("humidity", weather["humidity"].CleanString() + "%"); controller.SetValue("windspeed", weather["windSpeed"].CleanString()+" km/h"); controller.Reload(); completed(); }, (error)=>{ controller.NetworkFailed(error); completed(); }); }
private async Task <string> UploadToImgur(UIImage image, CancellationToken token) { try { NSUrlSession session; session = NSUrlSession.FromConfiguration( NSUrlSessionConfiguration.EphemeralSessionConfiguration, new NSUrlSessionTaskDelegate() as INSUrlSessionDelegate, new NSOperationQueue() ); NSUrl uploadHandleUrl = NSUrl.FromString("https://api.imgur.com/3/image"); NSMutableUrlRequest request = new NSMutableUrlRequest(uploadHandleUrl) { HttpMethod = "POST", Headers = NSDictionary.FromObjectsAndKeys( new [] { "Client-ID " + APIKeys.ImgurClientID }, new [] { "Authorization" } ) }; request["Content-Type"] = "text/paint"; var png = image.AsPNG(); string base64Image = png?.GetBase64EncodedString(NSDataBase64EncodingOptions.SixtyFourCharacterLineLength); request.Body = $"{base64Image}"; var dataTask = session.CreateDataTaskAsync(request); var dataTaskCancellable = Task.Run(async() => await dataTask, token); if (await Task.WhenAny(dataTaskCancellable, Task.Delay(HttpService.TimeOut)) == dataTaskCancellable) { var dataTaskRequest = await dataTaskCancellable; string result = new NSString(dataTaskRequest.Data, NSStringEncoding.UTF8); Regex reg = new Regex("link\":\"(.*?)\""); Match match = reg.Match(result); return(match.ToString().Replace("link\":\"", "").Replace("\"", "").Replace("\\/", "/")); } } catch { } return(null); }
protected override void OnElementChanged(ElementChangedEventArgs <EnhancedWebView> e) { base.OnElementChanged(e); var webView = Control as WKWebView; if (webView == null) { var config = new WKWebViewConfiguration(); webView = new WKWebView(Frame, config); SetNativeControl(webView); } if (e.OldElement != null) { } if (e.NewElement != null) { UrlWebViewSource source = (Xamarin.Forms.UrlWebViewSource)Element.Source; var webRequest = new NSMutableUrlRequest(new NSUrl(source.Url)); if (Element.CustomHeaders.Count > 0) { foreach (string key in Element.CustomHeaders.Keys) { webRequest[key] = Element.CustomHeaders[key]; } } if (!string.IsNullOrEmpty(Element.Username) && !string.IsNullOrEmpty(Element.Password)) { WebViewDelegate webViewDelegate = new WebViewDelegate(); webViewDelegate.Username = Element.Username; webViewDelegate.Password = Element.Password; webView.NavigationDelegate = webViewDelegate; } Control.LoadRequest(webRequest); } }
async Task <FileUploadResponse> MakeRequest(string uploadPath, string tag, string url, IDictionary <string, string> headers, string boundary) { var request = new NSMutableUrlRequest(NSUrl.FromString(url)); request.HttpMethod = "POST"; request["Accept"] = "*/*"; request["Content-Type"] = "multipart/form-data; boundary=" + boundary; uploadCompletionSource = new TaskCompletionSource <FileUploadResponse>(); var sessionConfiguration = CreateSessionConfiguration(headers, $"{SessionId}{uploadPath}", boundary); var session = NSUrlSession.FromConfiguration(sessionConfiguration, (INSUrlSessionDelegate)this, NSOperationQueue.MainQueue); var uploadTask = session.CreateUploadTask(request, new NSUrl(uploadPath, false)); uploadTask.TaskDescription = $"{tag}|{uploadPath}"; uploadTask.Priority = NSUrlSessionTaskPriority.High; uploadTask.Resume(); var retVal = await uploadCompletionSource.Task; return(retVal); }
private ApiResult <T> ApiPostCall <T>(string action_url) { var _result = new ApiResult <T>() { success = false, message = "", result = default(T) }; try { var _request = new NSMutableUrlRequest(NSUrl.FromString($"{Constants.LionApiUrl}{action_url}")); _request.HttpMethod = "POST"; var _response = (NSUrlResponse)null; var _error = (NSError)null; var _url_data = this.ApiCallAsync(_request, ref _response, ref _error); if (_error != null) { NSLogHelper.NSLog($"apiPostCall error: {_error}"); _result.message = _error.ToString(); } else { _result = JsonConvert.DeserializeObject <ApiResult <T> >(_url_data.ToString()); } } catch (Exception ex) { ConfigHelper.ShowConfirm("오류", "서버가 응답하지 않습니다.\n 잠시 후 다시 시도해주시기 바랍니다.", "확인"); _result.message = ex.ToString(); } return(_result); }
/// <summary> /// Sets the server url. Attaches a certificate if necessary. /// </summary> /// <param name="url">The server url</param> public void SetUrl(string url) { this._url = url; if (_client != null && _client.ReadyState != ReadyState.Closed) { _client.Close(); } //_client = new WebSocket(new NSUrl(url.Trim())); var nsUrlRequest = new NSMutableUrlRequest(new NSUrl(url.Trim())); if (AttachCert) { this.AttachCertificate(url, nsUrlRequest); } //NSObject[] protocols = { new NSString("wss"), new NSString("ws") }; //_client = new WebSocket(nsUrlRequest, protocols, true); _client = new WebSocket(nsUrlRequest); _client.Delegate = new SocketDelegate(this); LogUtility.LogMessage(String.Format("WebSocket Url set to {0}", url)); }
public override NSUrlRequest WillSendRequest(NSUrlConnection connection, NSUrlRequest request, NSUrlResponse response) { NSMutableUrlRequest mutableRequest = (NSMutableUrlRequest)request.MutableCopy(); if (response != null) { RemoveProperty("ADURLProtocol", mutableRequest); handler.Client.Redirected(handler, mutableRequest, response); connection.Cancel(); if (!request.Headers.ContainsKey(new NSString("x-ms-PkeyAuth"))) { mutableRequest[BrokerConstants.ChallengeHeaderKey] = BrokerConstants.ChallengeHeaderValue; } return(mutableRequest); } if (!request.Headers.ContainsKey(new NSString(BrokerConstants.ChallengeHeaderKey))) { mutableRequest[BrokerConstants.ChallengeHeaderKey] = BrokerConstants.ChallengeHeaderValue; } return(mutableRequest); }
partial void NSUrlConnectionButtonXamarinExample_TouchUpInside(UIButton sender) { string rxcui = "198440"; NSMutableUrlRequest request = new NSMutableUrlRequest(new NSUrl(string.Format("http://rxnav.nlm.nih.gov/REST/RxTerms/rxcui/{0}/allinfo", rxcui)), NSUrlRequestCachePolicy.ReloadRevalidatingCacheData, 20); request["Accept"] = "application/json"; RxTermNSURLConnectionDelegate connectionDelegate = new RxTermNSURLConnectionDelegate(); NSUrlConnection aConnection = new NSUrlConnection(request, connectionDelegate); aConnection.Start(); }
//this is a test protected override async Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, System.Threading.CancellationToken cancellationToken) { var urlRequest = new NSMutableUrlRequest { HttpMethod = request.Method.Method, Url = NSUrl.FromString(request.RequestUri.AbsoluteUri), AllowsCellularAccess = true, }; var dictionary = new NSMutableDictionary(); if (request.Headers != null && request.Headers.Count() > 0) { foreach (var item in request.Headers) { dictionary.SetValueForKey((NSString)item.Value.First(), (NSString)item.Key); } } if (request.Content != null) { foreach (var item in request.Content.Headers) { dictionary.SetValueForKey((NSString)item.Value.First(), (NSString)item.Key); } } urlRequest.Headers = dictionary; if (request.Content != null) { using (Stream requestStream = await request.Content.ReadAsStreamAsync()) { urlRequest.Body = NSData.FromStream(requestStream); } } try { NSUrlAsyncResult response = await NSUrlConnection.SendRequestAsync(urlRequest, NSOperationQueue.MainQueue); NSHttpUrlResponse httpResponse = response.Response as NSHttpUrlResponse; HttpContent responseContent = null; if (response.Data == null) { responseContent = new StringContent(""); } else { responseContent = new StreamContent(response.Data.AsStream()); } HttpResponseMessage responseMessage = new HttpResponseMessage { Content = responseContent, RequestMessage = request, StatusCode = (HttpStatusCode)int.Parse(httpResponse.StatusCode.ToString()) }; var headers = (from p in httpResponse.AllHeaderFields.Keys let key = p.ToString() let val = httpResponse.AllHeaderFields[p].ToString() orderby key select new KeyValuePair<string, string>(key, val)).ToList(); SetHeaders(headers, responseMessage); return responseMessage; } catch (NSErrorException ex) { throw new HttpRequestException(ex.Error.LocalizedDescription, ex); } catch (Exception ex) { throw new HttpRequestException("An error occurred while sending the request.", ex); } }
protected void RequestImageFromSource (string source, NIPhotoScrollViewPhotoSize photoSize, int photoIndex) { var isThumbnail = photoSize == NIPhotoScrollViewPhotoSize.NIPhotoScrollViewPhotoSizeThumbnail; var identifier = IdentifierWithPhotoSize (photoSize, photoIndex); var identifierKey = IdentifierKeyFromIdentifier (identifier); // avoid duplicate requests if (ActiveRequests.Contains (identifierKey)) return; NSUrl url = null; if (source.StartsWith ("http")) { url = new NSUrl (source); } else { url = new NSUrl (source, true); } NSMutableUrlRequest request = new NSMutableUrlRequest (url); request.TimeoutInterval = 30; var photoIndexKey = CacheKeyForPhotoIndex (photoIndex); var readOp = AFImageRequestOperation.ImageRequestOperationWithRequest (request, null, (NSUrlRequest req, NSHttpUrlResponse resp, UIImage img) => { // Store the image in the correct image cache. if (isThumbnail) { ThumbnailImageCache.StoreObject(img, photoIndexKey); } else { HighQualityImageCache.StoreObject(img, photoIndexKey); } // If you decide to move this code around then ensure that this method is called from // the main thread. Calling it from any other thread will have undefined results. PhotoAlbumView.DidLoadPhoto(img, photoIndex, photoSize); if(isThumbnail) { if(PhotoScrubberView != null) PhotoScrubberView.DidLoadThumbnail(img, photoIndex); } this.ActiveRequests.Remove(identifierKey); }, (NSUrlRequest req, NSHttpUrlResponse resp, NSError er) => { }); readOp.ImageScale = 1; // Set the operation priority level. if(photoSize == NIPhotoScrollViewPhotoSize.NIPhotoScrollViewPhotoSizeThumbnail) { readOp.QueuePriority = NSOperationQueuePriority.Low; }else { readOp.QueuePriority = NSOperationQueuePriority.Normal; } // Start the operation. ActiveRequests.Add(identifierKey); Queue.AddOperation(readOp); }
void ProcessRequest() { try { var requestUri = new StringBuilder(); requestUri.AppendFormat("{0}{1}{2}/{3}", BaseUri, (BaseUri.ToString().EndsWith("/")) ? string.Empty : "/", Uri.EscapeUriString(ScopeName), _wrapper.CacheRequest.RequestType.ToString()); string prefix = "?"; // Add the scope params if any foreach (KeyValuePair<string, string> kvp in _scopeParameters) { requestUri.AppendFormat("{0}{1}={2}", prefix, Uri.EscapeUriString(kvp.Key), Uri.EscapeUriString(kvp.Value)); if (prefix.Equals("?")) { prefix = "&"; } } // Create the WebRequest var webRequest = new NSMutableUrlRequest(new NSUrl(requestUri.ToString())); if (_credentials != null) { NetworkCredential credential = _credentials.GetCredential(BaseUri, "Basic"); string svcCredentials = Convert.ToBase64String(Encoding.ASCII.GetBytes(credential.UserName + ":" + credential.Password)); webRequest["Authorization"] = "Basic " + svcCredentials; webRequest["configname"] = _behaviors.ConfigName; webRequest["configversion"] = _behaviors.ConfigVersion; webRequest["coreversion"] = _behaviors.CoreVersion.ToString(); } else throw new Exception("Credentials is null"); foreach (var item in _behaviors.DeviceInfo) webRequest[item.Key] = item.Value; webRequest.HttpMethod = "POST"; webRequest["Accept"] = ApplicationContext.Current.Settings.BitMobileFormatterDisabled ? "application/atom+xml" : "application/bitmobile"; webRequest["Content-Type"] = ApplicationContext.Current.Settings.BitMobileFormatterDisabled ? "application/atom+xml" : "application/bitmobile"; webRequest["Accept-Encoding"] = "gzip, deflate"; webRequest.TimeoutInterval = Timeout; webRequest.Body = CreateRequestBody(); _wrapper.WebRequest = webRequest; if (_wrapper.CacheRequest.RequestType == CacheRequestType.UploadChanges) { lock (_lockObject) { _currentTask = CreateUploadSession().CreateDownloadTask(webRequest); _currentTask.Resume(); } } else { lock (_lockObject) { _currentTask = CreateDownloadSession().CreateDownloadTask(webRequest); _currentTask.Resume(); } } } catch (Exception e) { if (ExceptionUtility.IsFatal(e)) throw; _wrapper.Error = e; _workerManager.CompleteWorkRequest(_wrapper.WorkerRequest, _wrapper); } }
/// <summary> /// Initiates a navigate request to the provided URI. This method allows customizable options for including posted form data and HTTP headers. /// </summary> /// <param name="uri">The URI to navigate to.</param> /// <param name="postData">The posted form data.</param> /// <param name="additionalHeaders">The additional HTTP headers.</param> public void Navigate(Uri uri, byte[] postData, string additionalHeaders) { var request = new NSMutableUrlRequest(UriToNsUrl(uri)); if (postData != null && postData.Length != 0) { request.Body = NSData.FromArray(postData); } if (!string.IsNullOrEmpty(additionalHeaders)) { request.Headers = ParceAdditionalHeaders(additionalHeaders); } this.NativeWebView.LoadRequest(request); }
public static void SummonThreeDSecure (PaymentRequiresThreeDSecureModel threedDSecureReceipt, SecureWebView secureWebView) { secureWebView.ReceiptID = threedDSecureReceipt.ReceiptId; NSCharacterSet allowedCharecterSet = NSCharacterSet.FromString (@":/=,!$&'()*+;[]@#?").InvertedSet; NSString paReq = new NSString (threedDSecureReceipt.PaReq); var encodedPaReq = paReq.CreateStringByAddingPercentEncoding (allowedCharecterSet); NSString termUrl = new NSString ("judo1234567890://threedsecurecallback"); var encodedTermUrl = termUrl.CreateStringByAddingPercentEncoding (allowedCharecterSet); NSUrl url = new NSUrl (threedDSecureReceipt.AcsUrl); NSMutableUrlRequest req = new NSMutableUrlRequest (url); NSString postString = new NSString ("MD=" + threedDSecureReceipt.Md + "&PaReq=" + encodedPaReq + "&TermUrl=" + encodedTermUrl + ""); NSData postData = postString.Encode (NSStringEncoding.UTF8); req.HttpMethod = "POST"; req.Body = postData; try { DispatchQueue.MainQueue.DispatchAfter (DispatchTime.Now, () => { secureWebView.LoadRequest (req); JudoSDKManager.HideLoading (); secureWebView.Hidden = false; }); } catch (Exception e) { if (secureWebView._failureCallback != null) { var judoError = new JudoError { Exception = e }; secureWebView._failureCallback (judoError); } } }
public override UIImage GetUIImage() { if (this.image == null) { this.ImageLoadStatus = ImageStatus.Loading; if (!this.UriSource.IsAbsoluteUri) { this.image = UIImage.FromBundle(string.Format("iOS/{0}", this.UriSource.OriginalString)); if (this.image == null) { this.image = UIImage.FromBundle("Assets/" + this.UriSource.OriginalString); } } else if (this.UriSource.IsFile) { this.image = UIImage.FromBundle(this.UriSource.OriginalString); } else if (this.UriSource.Scheme == Uri.UriSchemeHttp || this.UriSource.Scheme == Uri.UriSchemeHttps) { NSUrlRequest req = new NSMutableUrlRequest(this.UriSource); NSOperationQueue queue = new NSOperationQueue(); NSUrlConnection.SendAsynchronousRequest(req, queue, (pesponse, data, error) => { try { if (error == null && data != null && data.Length != 0) { Dispatcher.BeginInvoke(() => { this.image = UIImage.LoadFromData(data); if (this.ImageOpened != null) { this.ImageOpened(this, new RoutedEventArgs()); } }); } else { Dispatcher.BeginInvoke(() => { if (this.ImageFailed != null) { this.ImageFailed(this, new ExceptionRoutedEventArgs()); } }); } } catch (Exception e) { Dispatcher.BeginInvoke(() => { this.image = UIImage.LoadFromData(data); if (this.ImageFailed != null) { this.ImageFailed(this, new ExceptionRoutedEventArgs(e)); } }); } }); return this.image; } if (this.image == null) { this.image = UIImage.FromFile(this.UriSource.OriginalString); } } return this.image; }
protected override async Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken) { var headers = request.Headers as IEnumerable<KeyValuePair<string, IEnumerable<string>>>; var ms = new MemoryStream(); if (request.Content != null) { await request.Content.CopyToAsync(ms).ConfigureAwait(false); headers = headers.Union(request.Content.Headers); } var rq = new NSMutableUrlRequest() { AllowsCellularAccess = true, Body = NSData.FromArray(ms.ToArray()), CachePolicy = NSUrlRequestCachePolicy.UseProtocolCachePolicy, Headers = headers.Aggregate(new NSMutableDictionary(), (acc, x) => { acc.Add(new NSString(x.Key), new NSString(x.Value.LastOrDefault())); return acc; }), HttpMethod = request.Method.ToString().ToUpperInvariant(), Url = NSUrl.FromString(request.RequestUri.AbsoluteUri), }; var host = request.RequestUri.GetLeftPart(UriPartial.Authority); var op = default(AFHTTPRequestOperation); var err = default(NSError); var handler = new AFHTTPClient(new NSUrl(host)); // NB: I have no idea how async methods affects object lifetime and // GC'ing of local variables, soooooooo.... lock (pins) { pins[rq] = new object[] { op, handler, }; } var blockingTcs = new TaskCompletionSource<bool>(); var ret= default(HttpResponseMessage); try { op = await enqueueOperation(handler, new AFHTTPRequestOperation(rq), cancellationToken, () => blockingTcs.SetResult(true), ex => { if (ex is ApplicationException) { err = (NSError)ex.Data["err"]; } if (ret == null) { return; } ret.ReasonPhrase = (err != null ? err.LocalizedDescription : null); }); } catch (ApplicationException ex) { op = (AFHTTPRequestOperation)ex.Data["op"]; err = (NSError)ex.Data["err"]; } var resp = (NSHttpUrlResponse)op.Response; if (err != null && resp == null && err.Domain == NSError.NSUrlErrorDomain) { throw new WebException (err.LocalizedDescription, WebExceptionStatus.NameResolutionFailure); } if (op.IsCancelled) { lock (pins) { pins.Remove(rq); } throw new TaskCanceledException(); } var httpContent = new StreamContent ( new ConcatenatingStream(new Func<Stream>[] { () => op.ResponseData == null || op.ResponseData.Length == 0 ? Stream.Null : op.ResponseData.AsStream(), }, true, blockingTcs.Task, () => { if (!op.IsCancelled && !op.IsFinished) op.Cancel(); })); cancellationToken.Register (httpContent.Dispose); ret = new HttpResponseMessage((HttpStatusCode)resp.StatusCode) { Content = httpContent, RequestMessage = request, ReasonPhrase = (err != null ? err.LocalizedDescription : null), }; foreach(var v in resp.AllHeaderFields) { ret.Headers.TryAddWithoutValidation(v.Key.ToString(), v.Value.ToString()); ret.Content.Headers.TryAddWithoutValidation(v.Key.ToString(), v.Value.ToString()); } lock (pins) { pins.Remove(rq); } return ret; }
void NSUrlConnectionButton_TouchUpInside(object sender, EventArgs args) { NSUrl url = NSUrl.FromString (URLRequestBin); NSMutableUrlRequest urlRequest = new NSMutableUrlRequest (url, NSUrlRequestCachePolicy.ReloadIgnoringLocalCacheData, 60.0); urlRequest.HttpMethod = "POST"; urlRequest.Body = NSData.FromString ("data=This is some data"); NSUrlConnection connection = new NSUrlConnection(urlRequest, new RxTermNSURLConnectionDelegate(), true); }
private async Task BegingDownloading(RequestData requestData, EventHandler<DownloadEventArgs> downloadedAction, Guid taskGuid) { NSUrlSession session = GetSession(requestData, downloadedAction); NSUrlSessionDownloadTask task; if (requestData.Type == RequestData.RequestType.Get) { NSString urlSting = new NSString(requestData.Url); urlSting = urlSting.CreateStringByAddingPercentEscapes(NSStringEncoding.UTF8); task = session.CreateDownloadTask(NSUrl.FromString(urlSting)); } else { NSMutableUrlRequest request = new NSMutableUrlRequest(NSUrl.FromString(requestData.Url)) { Body = FormatBody(requestData.Body), HttpMethod = "POST" }; task = session.CreateDownloadTask(request); } if (task != null) { task.TaskDescription = await JsonParser.SerializeToJsonString(new Dictionary<string, JsonValueInfo> { { "request", new JsonValueInfo(requestData.ToJson(), false) }, { "guid", new JsonValueInfo(taskGuid) } }); task.Resume(); } else { downloadedAction(this, new DownloadEventArgs("", taskGuid, requestData, "Can't create NSUrlSessionDownloadTask.")); } }
//this is a test protected override async Task <HttpResponseMessage> SendAsync(HttpRequestMessage request, System.Threading.CancellationToken cancellationToken) { var urlRequest = new NSMutableUrlRequest { HttpMethod = request.Method.Method, Url = NSUrl.FromString(request.RequestUri.AbsoluteUri), AllowsCellularAccess = true, }; var dictionary = new NSMutableDictionary(); if (request.Headers != null && request.Headers.Count() > 0) { foreach (var item in request.Headers) { dictionary.SetValueForKey((NSString)item.Value.First(), (NSString)item.Key); } } if (request.Content != null) { foreach (var item in request.Content.Headers) { dictionary.SetValueForKey((NSString)item.Value.First(), (NSString)item.Key); } } urlRequest.Headers = dictionary; if (request.Content != null) { using (Stream requestStream = await request.Content.ReadAsStreamAsync()) { urlRequest.Body = NSData.FromStream(requestStream); } } try { NSUrlAsyncResult response = await NSUrlConnection.SendRequestAsync(urlRequest, NSOperationQueue.MainQueue); NSHttpUrlResponse httpResponse = response.Response as NSHttpUrlResponse; HttpContent responseContent = null; if (response.Data == null) { responseContent = new StringContent(""); } else { responseContent = new StreamContent(response.Data.AsStream()); } HttpResponseMessage responseMessage = new HttpResponseMessage { Content = responseContent, RequestMessage = request, StatusCode = (HttpStatusCode)int.Parse(httpResponse.StatusCode.ToString()) }; var headers = (from p in httpResponse.AllHeaderFields.Keys let key = p.ToString() let val = httpResponse.AllHeaderFields[p].ToString() orderby key select new KeyValuePair <string, string>(key, val)).ToList(); SetHeaders(headers, responseMessage); return(responseMessage); } catch (NSErrorException ex) { throw new HttpRequestException(ex.Error.LocalizedDescription, ex); } catch (Exception ex) { throw new HttpRequestException("An error occurred while sending the request.", ex); } }
/// <summary> /// Prepares the upload. /// </summary> /// <returns>The upload.</returns> public async Task PrepareUpload() { try { Console.WriteLine("PrepareUpload called..."); if (session == null) session = InitBackgroundSession(); // Check if task already exits var tsk = await GetPendingTask(); if (tsk != null) { Console.WriteLine ("TaskId {0} found, state: {1}", tsk.TaskIdentifier, tsk.State); // If our task is suspended, resume it. if (tsk.State == NSUrlSessionTaskState.Suspended) { Console.WriteLine ("Resuming taskId {0}...", tsk.TaskIdentifier); tsk.Resume(); } return; // exit, we already have a task } // For demo purposes file is attached to project as "Content" and PDF is 8.1MB. var fileToUpload = "UIKitUICatalog.pdf"; if(File.Exists(fileToUpload)) { var boundary = "FileBoundary"; var bodyPath = Path.Combine (Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), "BodyData.tmp"); // Create request NSUrl uploadHandleUrl = NSUrl.FromString (webApiAddress); NSMutableUrlRequest request = new NSMutableUrlRequest (uploadHandleUrl); request.HttpMethod = "POST"; request ["Content-Type"] = "multipart/form-data; boundary=" + boundary; request ["FileName"] = Path.GetFileName(fileToUpload); // Construct the body System.Text.StringBuilder sb = new System.Text.StringBuilder(""); sb.AppendFormat("--{0}\r\n", boundary); sb.AppendFormat("Content-Disposition: form-data; name=\"file\"; filename=\"{0}\"\r\n", Path.GetFileName(fileToUpload)); sb.Append("Content-Type: application/octet-stream\r\n\r\n"); // Delete any previous body data file if (File.Exists(bodyPath)) File.Delete(bodyPath); // Write file to BodyPart var fileBytes = File.ReadAllBytes (fileToUpload); using (var writeStream = new FileStream (bodyPath, FileMode.Create, FileAccess.Write, FileShare.Read)) { writeStream.Write (Encoding.Default.GetBytes (sb.ToString ()), 0, sb.Length); writeStream.Write (fileBytes, 0, fileBytes.Length); sb.Clear (); sb.AppendFormat ("\r\n--{0}--\r\n", boundary); writeStream.Write (Encoding.Default.GetBytes (sb.ToString ()), 0, sb.Length); } sb = null; fileBytes = null; // Creating upload task var uploadTask = session.CreateUploadTask(request, NSUrl.FromFilename(bodyPath)); Console.WriteLine ("New TaskID: {0}", uploadTask.TaskIdentifier); // Start task uploadTask.Resume (); } else { Console.WriteLine ("Upload file doesn't exist. File: {0}", fileToUpload); } } catch (Exception ex) { Console.WriteLine ("PrepareUpload Ex: {0}", ex.Message); } }
private static RxTerm RxTermViaNSURLConnectionAsync(string rxcui, Action<RxTerm> callback = null) { var rxTerm = new RxTerm(); try { var request = new NSMutableUrlRequest(new NSUrl(string.Format("http://rxnav.nlm.nih.gov/REST/RxTerms/rxcui/{0}/allinfo", rxcui)), NSUrlRequestCachePolicy.ReloadRevalidatingCacheData, 20); request["Accept"] = "application/json"; var connectionDelegate = new RxTermNSURLConnectionDelegate(); var connection = new NSUrlConnection(request, connectionDelegate); connection.Start(); } catch (Exception ex) { Console.WriteLine("Problem getting data for concept: {0} -- Exception: {1}", rxcui, ex.Message + ex.StackTrace); } return rxTerm; }
void NSUrlSessionButton_TouchUpInside(object sender, EventArgs args) { NSUrlSessionConfiguration sessionConfig = NSUrlSessionConfiguration.DefaultSessionConfiguration; sessionConfig.AllowsCellularAccess = true; sessionConfig.TimeoutIntervalForRequest = 30.0; sessionConfig.TimeoutIntervalForResource = 60.0; sessionConfig.HttpMaximumConnectionsPerHost = 1; NSUrl url = NSUrl.FromString (URLRequestBin); NSMutableUrlRequest urlRequest = new NSMutableUrlRequest (url, NSUrlRequestCachePolicy.ReloadIgnoringLocalCacheData, 60.0); urlRequest.HttpMethod = "POST"; urlRequest.Body = NSData.FromString ("data=This is some NSURLSession data"); NSUrlSession session = NSUrlSession.FromConfiguration(sessionConfig); NSUrlSessionDataTask dataTask = session.CreateDataTask (urlRequest); dataTask.Resume (); }