/// <summary> /// Starts an asynchronous operation to get keyword rank. /// </summary> /// <param name="domainName"></param> /// <param name="callback"></param> /// <param name="userState"></param> /// <returns></returns> public static IAsyncResult BeginGetKeywordRank(string keyword, string domainName, AsyncCallback callback, object userState) { HttpWebRequest request = CreateNormalRequest(GetKeywordRankQueryUri(keyword)); AsyncResult <IEnumerable <int> > result = new AsyncResult <IEnumerable <int> >(callback, userState); NetworkRequestAsyncTimeout.RegisterRequest(request.BeginGetResponse((ar) => { IEnumerable <int> rank = null; Exception error = null; byte[] buffer = g_bufferManager.TakeBuffer(BUFFER_SIZE); try { string content = null; using (HttpWebResponse response = (HttpWebResponse)((HttpWebRequest)ar.AsyncState).EndGetResponse(ar)) { content = response.GetResponseString(buffer); } rank = ParseKeywordRank(content, domainName); } catch (Exception ex) { error = ex; } finally { g_bufferManager.ReturnBuffer(buffer); } result.MarkCompleted(error, false, rank); }, request), request, TIMEOUT); return(result); }
/// <summary> /// Starts an asynchronous operation to get web site info. /// </summary> /// <param name="domainName"></param> /// <param name="callback"></param> /// <param name="userState"></param> /// <returns></returns> public static IAsyncResult BeginGetWebSiteInfo(string url, IWebProxy proxy, AsyncCallback callback, object userState) { HttpWebRequest request = CreateGetWebSiteInfoRequest(url, proxy); AsyncResult <IWebSiteInfo> result = new AsyncResult <IWebSiteInfo>(callback, userState); NetworkRequestAsyncTimeout.RegisterRequest(request.BeginGetResponse((ar) => { IWebSiteInfo info = null; Exception error = null; byte[] buffer = g_bufferManager.TakeBuffer(BUFFER_SIZE); try { string content = null; using (HttpWebResponse response = (HttpWebResponse)((HttpWebRequest)ar.AsyncState).EndGetResponse(ar)) { content = response.GetResponseString(buffer); info = ParseWebSiteInfo(url, response, content); } } catch (Exception ex) { error = ex; } finally { g_bufferManager.ReturnBuffer(buffer); } result.MarkCompleted(error, false, info); }, request), request, TIMEOUT); return(result); }
/// <summary> /// Starts an asynchronous operation to get include info. /// </summary> /// <param name="domainName"></param> /// <param name="callback"></param> /// <param name="userState"></param> /// <returns></returns> public static IAsyncResult BeginGetIncludeInfo(string domainName, AsyncCallback callback, object userState) { HttpWebRequest request = CreateNormalRequest(GetIncludeInfoQueryUri(domainName)); AsyncResult <IHaosouIncludeInfo> result = new AsyncResult <IHaosouIncludeInfo>(callback, userState); NetworkRequestAsyncTimeout.RegisterRequest(request.BeginGetResponse((ar) => { IHaosouIncludeInfo info = null; Exception error = null; byte[] buffer = g_bufferManager.TakeBuffer(BUFFER_SIZE); try { string content = null; using (HttpWebResponse response = (HttpWebResponse)((HttpWebRequest)ar.AsyncState).EndGetResponse(ar)) { content = response.GetResponseString(buffer); } info = new IncludeInfo { IncludeCount = ParseIncludeCount(content), }; } catch (Exception ex) { error = ex; } finally { g_bufferManager.ReturnBuffer(buffer); } result.MarkCompleted(error, false, info); }, request), request, TIMEOUT); return(result); }
private void SendPostRequest <TReturn>(string url, object obj, Action <Exception, TReturn> callback) where TReturn : IWeChatReturnValue { byte[] data = Encoding.UTF8.GetBytes(obj is string?(string)obj: this.m_jsonSerializer.Serialize(obj)); HttpWebRequest request = this.CreateRequest(url, "application/json", WebRequestMethods.Http.Post); Exception syncError = null; try { request.ContentLength = data.Length; NetworkRequestAsyncTimeout.RegisterRequest(request.BeginGetRequestStream((ar) => { try { using (Stream writer = ((HttpWebRequest)ar.AsyncState).EndGetRequestStream(ar)) { writer.Write(data, 0, data.Length); } } catch (Exception ex) { callback(ex, default(TReturn)); return; } this.SendHttpRequest <TReturn>((HttpWebRequest)ar.AsyncState, callback); }, request), request, this.m_timeout); } catch (Exception ex) { syncError = ex; } if (syncError != null) { callback(syncError, default(TReturn)); } }
/// <summary> /// Starts an asynchronous operation to push urls to baidu.com. /// </summary> /// <param name="site"></param> /// <param name="token"></param> /// <param name="urls"></param> /// <param name="callback"></param> /// <param name="userState"></param> /// <returns></returns> public static IAsyncResult BeginPush(string site, string token, bool isOriginal, IEnumerable <string> urls, AsyncCallback callback, object userState) { HttpWebRequest request = CreatePushRequest(site, token, isOriginal); AsyncResult <IBaiduPushResult> result = new AsyncResult <IBaiduPushResult>(callback, userState); byte[] data = Encoding.UTF8.GetBytes(urls.StringJoin("\r\n")); request.ContentLength = data.Length; NetworkRequestAsyncTimeout.RegisterRequest(request.BeginGetRequestStream((streamResult) => { try { using (Stream writer = ((HttpWebRequest)streamResult.AsyncState).EndGetRequestStream(streamResult)) { writer.Write(data, 0, data.Length); } } catch (Exception ex) { result.MarkCompleted(ex, false, null); return; } NetworkRequestAsyncTimeout.RegisterRequest(((HttpWebRequest)streamResult.AsyncState).BeginGetResponse((contentResult) => { string content = null; Exception error = null; PushResult pushResult = null; byte[] buffer = g_bufferManager.TakeBuffer(BUFFER_SIZE); try { using (HttpWebResponse response = (HttpWebResponse)((HttpWebRequest)contentResult.AsyncState).EndGetResponse(contentResult)) { if (!string.IsNullOrWhiteSpace(content = response.GetResponseString(buffer))) { pushResult = new JavaScriptSerializer().Deserialize <PushResult>(content); } } } catch (WebException ex) { try { using (HttpWebResponse response = (HttpWebResponse)ex.Response) { if (response != null) { if (!string.IsNullOrWhiteSpace(content = response.GetResponseString(buffer))) { pushResult = new JavaScriptSerializer().Deserialize <PushResult>(content); } } else { error = ex; } } } catch { error = ex; } } catch (Exception ex) { error = ex; } finally { g_bufferManager.ReturnBuffer(buffer); } result.MarkCompleted(error, false, pushResult); }, request), request, TIMEOUT); }, request), request, TIMEOUT); return(result); }
public void RegisterTest_WebRequest() { HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://localhost:44444/test.jpg"); request.Method = WebRequestMethods.Http.Get; NetworkRequestAsyncTimeout.RegisterRequest(request.BeginGetResponse(null, null), request, 1); }
private void SendHttpRequest <TReturn>(HttpWebRequest request, Action <Exception, TReturn> callback) where TReturn : IWeChatReturnValue { Exception syncError = null; try { NetworkRequestAsyncTimeout.RegisterRequest(request.BeginGetResponse((ar) => { string content = null; Exception error = null; byte[] buffer = this.m_bufferManager.TakeBuffer(BUFFER_POOL_ITEM_SIZE); try { using (HttpWebResponse response = (HttpWebResponse)((HttpWebRequest)ar.AsyncState).EndGetResponse(ar)) { content = response.GetResponseString(Encoding.UTF8, buffer); } } catch (Exception ex) { error = ex; } finally { this.m_bufferManager.ReturnBuffer(buffer); } TReturn value = default(TReturn); if (error == null) { try { value = WeChatReturnValue.Create <TReturn>(content); error = this.DetectWeChatException(value); } catch (Exception ex) { error = ex; } } callback(error, value); }, request), request, this.m_timeout); } catch (Exception ex) { syncError = ex; } if (syncError != null) { callback(syncError, default(TReturn)); } }
/// <summary> /// Begins an asynchronous operation to invoke the update notification service of baidu.com(Baidu PING). /// </summary> /// <param name="siteName"></param> /// <param name="homepageUri"></param> /// <param name="articleUri"></param> /// <param name="rssUri"></param> /// <param name="callback"></param> /// <param name="userState"></param> /// <returns></returns> public static IAsyncResult BeginPing(string siteName, string homepageUri, string articleUri, string rssUri, AsyncCallback callback, object userState) { HttpWebRequest request = CreatePingRequest(); AsyncResult <bool> result = new AsyncResult <bool>(callback, userState); byte[] data = Encoding.UTF8.GetBytes(string.Format(g_pingRequestFormat, siteName, homepageUri, articleUri, rssUri)); request.ContentLength = data.Length; NetworkRequestAsyncTimeout.RegisterRequest(request.BeginGetRequestStream((streamResult) => { try { using (Stream writer = ((HttpWebRequest)streamResult.AsyncState).EndGetRequestStream(streamResult)) { writer.Write(data, 0, data.Length); } } catch (WebException) { result.MarkCompleted(null, false, false); return; } catch (Exception ex) { result.MarkCompleted(ex, false, false); return; } NetworkRequestAsyncTimeout.RegisterRequest(((HttpWebRequest)streamResult.AsyncState).BeginGetResponse((contentResult) => { string content = null; Exception error = null; byte[] buffer = g_bufferManager.TakeBuffer(BUFFER_SIZE); try { using (HttpWebResponse response = (HttpWebResponse)((HttpWebRequest)contentResult.AsyncState).EndGetResponse(contentResult)) { content = response.GetResponseString(buffer); } } catch (WebException) { } catch (Exception ex) { error = ex; } finally { g_bufferManager.ReturnBuffer(buffer); } result.MarkCompleted(error, false, !string.IsNullOrWhiteSpace(content) && content.Contains("<int>0</int>")); }, request), request, TIMEOUT); }, request), request, TIMEOUT); return(result); }
private void SendHttpRequest(HttpWebRequest request, Action <Exception, string> callback) { NetworkRequestAsyncTimeout.RegisterRequest(request.BeginGetResponse((ar) => { string content = null; Exception error = null; byte[] buffer = this.m_bufferManager.TakeBuffer(BUFFER_POOL_ITEM_SIZE); try { using (HttpWebResponse response = (HttpWebResponse)request.EndGetResponse(ar)) { content = response.GetResponseString(buffer); } } catch (WebException ex) { error = this.GetAlibabaException(ex); } catch (Exception ex) { error = new AlibabaException(string.Format("Error occurred when send HTTP request: {0}", ex.Message), 500, ex); } finally { this.m_bufferManager.ReturnBuffer(buffer); } callback(error, content); }, null), request, this.m_timeout); }
private void SendPostRequest(string url, IDictionary <string, string> args, Encoding encoding, Action <Exception, string> callback) { HttpWebRequest request = this.CreateRequest(url, WebRequestMethods.Http.Post, encoding); string queryString = AlibabaHelper.GetQueryString(args, encoding ?? this.m_defaultEncoding); byte[] data = queryString.Length > 0 ? (encoding ?? this.m_defaultEncoding).GetBytes(queryString) : null; if (data != null) { request.ContentLength = data.Length; NetworkRequestAsyncTimeout.RegisterRequest(request.BeginGetRequestStream((ar) => { Exception error = null; try { using (Stream writer = request.EndGetRequestStream(ar)) { writer.Write(data, 0, data.Length); } } catch (WebException ex) { error = this.GetAlibabaException(ex); } catch (Exception ex) { error = new AlibabaException(string.Format("Error occurred when send POST data: {0}", ex.Message), 500, ex); } if (error != null) { callback(error, null); } else { this.SendHttpRequest(request, callback); } }, null), request, this.m_timeout); } else { this.SendHttpRequest(request, callback); } }