public virtual async Task <ActionEvent> ExecuteAsync(CancellationToken token) { HttpRequestItem requestItem = null; if (!token.IsCancellationRequested) { ++ExcuteTimes; try { requestItem = BuildRequest(); var response = await HttpService.ExecuteHttpRequestAsync(requestItem, token).ConfigureAwait(false); return(await HandleResponse(response).ConfigureAwait(false)); } catch (TaskCanceledException) { } catch (OperationCanceledException) { } catch (Exception ex) { ex = ex.InnerException ?? ex; #if DEBUG // 此处用于生成请求信息,然后用fiddler等工具测试 if (requestItem != null) { var url = requestItem.RawUrl; var header = requestItem.GetRequestHeader(HttpService.GetCookies(requestItem.RawUrl)); var data = requestItem.RawData; var len = data.Length; } #endif return(await HandleExceptionAsync(ex).ConfigureAwait(false)); } } return(await NotifyActionEventAsync(ActionEvent.CreateEvent(ActionEventType.EvtCanceled, this)).ConfigureAwait(false)); }
public async Task <HttpResponseMessage> ExecuteAsync(HttpRequestItem httpRequestItem) { HttpRequestMessage httpRequest = new HttpRequestMessage() { RequestUri = new Uri(httpRequestItem.URL), Method = httpRequestItem.HttpMethod, Content = httpRequestItem.HttpContent }; httpRequest.Headers.Add("Authorization", httpRequestItem.AuthzHeader); if (httpRequestItem.IsDataRequest) { httpRequest.Headers.Add("X-Api-Version", "1"); httpRequest.Headers.Add("Accept", "application/json"); } //if (httpRequestItem.IsFileUpload) //{ // httpRequest.Headers.TryAddWithoutValidation("Content-Type", "multipart/form-data"); //} HttpResponseMessage httpResponse = await _client.SendAsync(httpRequest, HttpCompletionOption.ResponseContentRead); return(httpResponse); }
public async Task GetAccessTokenAsync(string verifier) { string authzHeader = _authorizationHeader.CreateForAccess(Config.ConsumerKey, Config.ConsumerSecret, Config.Token, Config.TokenSecret, verifier); var httpRequestItem = new HttpRequestItem { URL = Consts.AccessToken, HttpMethod = System.Net.Http.HttpMethod.Get, AuthzHeader = authzHeader, HttpContent = null, IsDataRequest = false }; var response = await _httpRequestHandler.ExecuteAsync(httpRequestItem).ConfigureAwait(false); var result = await response.Content.ReadAsStringAsync().ConfigureAwait(false); if (!response.IsSuccessStatusCode) { throw new ServerException((int)response.StatusCode, result); } string[] kvpairs = result.Split('&'); System.Collections.Generic.Dictionary <string, string> parameters = System.Linq.Enumerable.ToDictionary(System.Linq.Enumerable.Select(kvpairs, pair => pair.Split('=')), kv => kv[0], kv => kv[1]); string oauth_error_message; if (parameters.TryGetValue("oauth_error_message", out oauth_error_message)) { throw new ServerException(oauth_error_message); } Config.Token = parameters["oauth_token"]; Config.TokenSecret = parameters["oauth_token_secret"]; }
private static HttpRequestMessage GetHttpRequest(HttpRequestItem item) { var request = new HttpRequestMessage(new HttpMethod(item.Method.ToString()), item.GetUrl()); switch (item.Method) { case HttpMethodType.Post: case HttpMethodType.Put: case HttpMethodType.Delete: case HttpMethodType.Head: case HttpMethodType.Options: case HttpMethodType.Trace: request.Content = new StringContent(item.RawData, item.EncodingType, item.ContentType); break; case HttpMethodType.Get: default: break; } foreach (var header in item.HeaderMap.Where(h => !NotAddHeaderNames.Contains(h.Key))) { request.Headers.Add(header.Key, header.Value); } return(request); }
protected override void ModifyRequest(HttpRequestItem req) { req.AddQueryValue("tuin", _friend.Uin); req.AddQueryValue("vfwebqq", Session.Vfwebqq); req.AddQueryValue("t", Timestamp); req.Referrer = ApiUrls.ReferrerS; }
private HttpRequestMessage GetHttpRequest(HttpRequestItem item) { var request = new HttpRequestMessage(new HttpMethod(item.Method.ToString().ToUpper()), item.GetUrl()); switch (item.Method) { case HttpMethodType.Post: case HttpMethodType.Put: case HttpMethodType.Delete: case HttpMethodType.Head: case HttpMethodType.Options: case HttpMethodType.Trace: request.Content = new StringContent(item.RawData, item.EncodingType, item.ContentType); break; case HttpMethodType.Get: default: break; } foreach (var header in item.HeaderMap.Where(h => !NotAddHeaderNames.Contains(h.Key))) { request.Headers.Add(header.Key, header.Value); } var cookies = item.HeaderMap.GetOrDefault(HttpConstants.Cookie); if (!cookies.IsNullOrEmpty()) { _cookieContainer.SetCookies(request.RequestUri, cookies); } return(request); }
/// <summary> /// Processes the specified request. /// </summary> /// <param name="request"></param> /// <param name="processRequestHandler"></param> /// <param name="cancellationToken"></param> /// <returns></returns> public async Task <HttpResponseMessage> ProcessRequestAsync(HttpRequestMessage request, Func <HttpRequestMessage, CancellationToken, Task <HttpResponseMessage> > processRequestHandler, CancellationToken cancellationToken) { if (RejectAllRequests()) { // request cannot be queued or processed at this time, return(RejectRequest(request)); } if (_requestQueue != null) { // enqueue the workitem var item = new HttpRequestItem { Request = request, ProcessRequestHandler = processRequestHandler, CancellationToken = cancellationToken, CompletionSource = new TaskCompletionSource <HttpResponseMessage>() }; if (_requestQueue.Post(item)) { return(await item.CompletionSource.Task); } else { TraceWriter.Info($"Http request queue limit of {Config.MaxOutstandingRequests} has been exceeded."); return(RejectRequest(request)); } } else { // queue is not enabled, so just dispatch the request directly return(await processRequestHandler(request, cancellationToken)); } }
protected override HttpRequestItem BuildRequest() { var url = Session.SyncUrl; if (Session.SyncUrl == null) { var host = ApiUrls.SyncHosts[_hostIndex]; url = $"https://{host}/cgi-bin/mmwebwx-bin/synccheck"; Logger.LogDebug($"测试站点{_hostIndex + 1}: {host}"); } else { Logger.LogInformation("Begin SyncCheck..."); } var req = new HttpRequestItem(HttpMethodType.Get, url) { // 此处需要将key都变成小写,否则提交会失败 StringData = Session.BaseRequest.ToDictionary(pair => pair.Key.ToLower(), pair => pair.Value).ToQueryString(), }; req.AddQueryValue("r", Timestamp); req.AddQueryValue("synckey", Session.SyncKeyStr); req.AddQueryValue("_", Session.Seq++); return(req); }
protected override void ModifyRequest(HttpRequestItem req) { var qrsig = HttpService.GetCookie("qrsig", ApiUrls.CheckQRCode).Value; req.AddData("ptqrtoken", QQEncryptor.GetPtqrtoken(qrsig)); req.AddData("webqq_type", "10"); req.AddData("remember_uin", "1"); req.AddData("login2qq", "1"); req.AddData("aid", "501004106"); req.AddData("u1", "http://w.qq.com/proxy.html?login2qq=1&webqq_type=10"); req.AddData("ptredirect", "0"); req.AddData("ptlang", "2052"); req.AddData("daid", "164"); req.AddData("from_ui", "1"); req.AddData("pttype", "1"); req.AddData("dumy", ""); req.AddData("fp", "loginerroralert"); req.AddData("action", "0-0-10194"); req.AddData("mibao_css", "m_webqq"); req.AddData("t", "1"); req.AddData("g", "1"); req.AddData("js_type", "0"); req.AddData("js_ver", JsVer); req.AddData("login_sig", ""); req.AddData("pt_randsalt", "0"); }
public override HttpRequestItem BuildRequest() { var req = new HttpRequestItem(HttpMethodType.Get, ApiUrls.CheckQRCode); req.AddQueryValue("webqq_type", "10"); req.AddQueryValue("remember_uin", "1"); req.AddQueryValue("login2qq", "1"); req.AddQueryValue("aid", "501004106"); req.AddQueryValue("u1", "http://w.qq.com/proxy.html?login2qq=1&webqq_type=10"); req.AddQueryValue("ptredirect", "0"); req.AddQueryValue("ptlang", "2052"); req.AddQueryValue("daid", "164"); req.AddQueryValue("from_ui", "1"); req.AddQueryValue("pttype", "1"); req.AddQueryValue("dumy", ""); req.AddQueryValue("fp", "loginerroralert"); req.AddQueryValue("action", "0-0-205298"); req.AddQueryValue("mibao_css", "m_webqq"); req.AddQueryValue("t", "1"); req.AddQueryValue("g", "1"); req.AddQueryValue("js_type", "0"); req.AddQueryValue("js_ver", JsVer); req.AddQueryValue("login_sig", ""); req.AddQueryValue("pt_randsalt", "0"); return(req); }
public override bool AuthorizeHubConnection(HubDescriptor hubDescriptor, IRequest request) { bool flag = false; string uid = request.QueryString.Get("uid"); string token = request.QueryString.Get("token"); if (string.IsNullOrWhiteSpace(uid)) { return(flag); } //token 验证 if (!string.IsNullOrWhiteSpace(token) && Tool.MD5Check(uid, token)) { flag = true; } else { //接口验证 HttpRequestItem req = new HttpRequestItem() { URL = Constant.AuthenUrl, Postdata = string.Format("uid={0}", uid) }; string resData = HttpHelp.SendHttpRequest(req); if (!string.IsNullOrWhiteSpace(resData)) { HttpResponseItem res = JsonUtil <HttpResponseItem> .Deserialize(resData); flag = res.AckCode == ResultAckCodeEnum.Success && res.ResultCode == 1; } } return(flag ? base.AuthorizeHubConnection(hubDescriptor, request) : false); }
protected override void ModifyRequest(HttpRequestItem req) { req.AddData("gcode", _group.Code); req.AddData("vfwebqq", Session.Vfwebqq); req.AddData("t", Timestamp); req.Referrer = ApiUrls.ReferrerS; }
public async Task <HttpResponseMessage> RequestAsync(HttpRequestItem httpRequestItem) { _client.DefaultRequestHeaders.Authorization = httpRequestItem.AuthHeaderValue; HttpRequestMessage httpRequest = new HttpRequestMessage() { RequestUri = new Uri(httpRequestItem.Url), Method = httpRequestItem.HttpMethod, Content = httpRequestItem.HttpContent }; if (httpRequestItem.Headers != null) { foreach (var header in httpRequestItem.Headers) { httpRequest.Headers.Add(header.Item1, header.Item2); } } if (httpRequestItem.IfUnmodifiedSinceHeader != DateTime.MinValue) { httpRequest.Headers.IfUnmodifiedSince = httpRequestItem.IfUnmodifiedSinceHeader; } HttpResponseMessage httpResponseMessage = await _client.SendAsync(httpRequest); return(httpResponseMessage); }
public async Task <bool> MoveFileAsync(string fileId, string newParentFolderId, string newFileName, bool overwriteFileWithTheSameName) { bool result = false; fileId = NormalizeId(fileId); string targetFileId = NormalizeId(string.Format("{0}/{1}", newParentFolderId, newFileName)); if (fileId != null && targetFileId != null) { fileId = fileId.Replace("/copy", "/files"); string url = string.Format("{0}{1}?path={2}&overwrite={3}", URL.RESTRoot, fileId, targetFileId, overwriteFileWithTheSameName.ToLowerString()); HttpRequestItem httpRequestItem = CreateHttpRequestItem(url, HttpMethod.Put); HttpResponseMessage httpResponseMessage = await _httpRequestHandler.ExecuteAsync(httpRequestItem); if (httpResponseMessage.IsSuccessStatusCode) { result = true; } } return(result); }
public async Task UpdateUserAsync(UserUpdate userUpdate) { string url = string.Format("{0}/{1}", URL.RESTRoot, "user"); string authzHeader = AuthorizationHeader.CreateForREST(Config.ConsumerKey, Config.ConsumerSecret, AuthToken.Token, AuthToken.TokenSecret, url, "PUT"); string serializeObject = JsonConvert.SerializeObject(userUpdate); HttpContent httpContent = new StringContent(serializeObject); HttpRequestItem httpRequestItem = new HttpRequestItem() { URL = url, HttpMethod = HttpMethod.Put, AuthzHeader = authzHeader, HttpContent = httpContent, IsDataRequest = true }; HttpRequestHandler httpRequestHandler = new HttpRequestHandler(); string executeAsync = await httpRequestHandler.ReadAsStringAsync(httpRequestItem); //TODO : Investigate //return JsonConvert.DeserializeObject<User>(executeAsync); }
public async Task <Validation <string> > Create(Expense expense) { IEnumerable <KeyValuePair <string, string> > dict = UrlFormEncoded.Encode(expense); HttpRequestItem httpRequestItem = new HttpRequestItem() { Url = "https://api.toshl.com/expenses/", HttpMethod = HttpMethod.Post, AuthHeaderValue = new AuthenticationHeaderValue("Bearer", AccessToken), HttpContent = new FormUrlEncodedContent(dict) }; HttpResponseMessage httpResponseMessage = await _requestHandler.RequestAsync(httpRequestItem); if (httpResponseMessage.IsSuccessStatusCode) { string id = httpResponseMessage.Headers.GetValues("Location").First(); id = id.Split('/').Last(); return(new Validation <string>() { ErrorMessages = new string[0], ReturnObject = id }); } return(new Validation <string>() { ErrorMessages = new string[] { httpResponseMessage.ReasonPhrase } }); }
public async Task <HttpResponseMessage> ExecuteAsync(HttpRequestItem httpRequestItem, HttpCompletionOption httpCompletionOption = HttpCompletionOption.ResponseContentRead) { var httpRequest = new HttpRequestMessage { RequestUri = new Uri(httpRequestItem.URL), Method = httpRequestItem.HttpMethod, Content = httpRequestItem.HttpContent }; httpRequest.Headers.Add("Authorization", httpRequestItem.AuthzHeader); if (httpRequestItem.IsDataRequest) { httpRequest.Headers.Add("X-Api-Version", "1"); httpRequest.Headers.Add("Accept", "application/json"); } if (httpRequestItem.Headers != null) { foreach (var kvp in httpRequestItem.Headers) { httpRequest.Headers.Add(kvp.Key, kvp.Value); } } var client = httpRequestItem.IsFileUpload ? _uploadsClient : _client; HttpResponseMessage httpResponse = await client.SendAsync(httpRequest, httpCompletionOption).ConfigureAwait(false); return(httpResponse); }
public virtual async Task <HttpResponseItem> ExecuteHttpRequestAsync(HttpRequestItem requestItem, CancellationToken token) { token.ThrowIfCancellationRequested(); var responseItem = new HttpResponseItem { RequestItem = requestItem }; var httpRequest = GetHttpRequest(requestItem); HttpResponseMessage response = null; try { response = await _httpClient.SendAsync(httpRequest, HttpCompletionOption.ResponseHeadersRead, token).ConfigureAwait(false); while (response.StatusCode == HttpStatusCode.Redirect && response.Headers.Location != null) { response = await _httpClient.GetAsync(response.Headers.Location, token).ConfigureAwait(false); } response.EnsureSuccessStatusCode(); ReadHeader(response, responseItem); await ReadContentAsync(response, responseItem).ConfigureAwait(false); return(responseItem); } finally { response?.Dispose(); } }
public override HttpRequestItem BuildRequest() { var req = HttpRequestItem.CreateGetRequest(ApiUrls.GetSelfInfo); req.AddQueryValue("t", Timestamp); req.Referrer = ApiUrls.Referrer; return(req); }
protected override void ModifyRequest(HttpRequestItem req) { req.AddData("ptwebqq", Session.Ptwebqq); req.AddData("clientid", Session.ClientId); req.AddData("psessionid", ""); req.AddData("t", Timestamp); req.Referrer = ApiUrls.ReferrerS; }
protected override void ModifyRequest(HttpRequestItem req) { req.AddData("clientid", Session.ClientId); req.AddData("psessionid", Session.SessionId); req.AddData("vfwebqq", Session.Vfwebqq); req.AddData("t", Timestamp); req.AddData("did", _discussion.Did); req.Referrer = ApiUrls.Referrer; }
protected override HttpRequestItem BuildRequest() { var req = new HttpRequestItem(HttpMethodType.Post, string.Format(ApiUrls.GetQRCode, Session.Uuid)); req.AddQueryValue("t", "webwx"); req.AddQueryValue("_", Session.Seq++); req.ResultType = HttpResultType.Stream; return(req); }
public override HttpRequestItem BuildRequest() { HttpRequestItem req = null; // req.AddQueryValue("tuin", _friend.Uin); req.AddQueryValue("vfwebqq", Session.Vfwebqq); req.AddQueryValue("t", Timestamp); return(req); }
protected override HttpRequestItem BuildRequest() { var req = new HttpRequestItem(HttpMethodType.Post, string.Format(ApiUrls.GetQRCode, Session.Uuid)); req.AddData("t", "webwx"); req.AddData("_", (Session.Seq++).ToString()); req.ResultType = HttpResultType.Byte; return(req); }
public override HttpRequestItem BuildRequest() { var req = new HttpRequestItem(HttpMethodType.Post, ApiUrls.CheckQRCode); req.AddQueryValue("tip", _tip); req.AddQueryValue("uuid", Session.Uuid); req.AddQueryValue("_", Session.Seq++); return(req); }
public async Task <Link[]> GetAllLinksAsync() { string url = string.Format("{0}/links", URL.RESTRoot); HttpRequestItem httpRequestItem = CreateHttpRequestItem(url, HttpMethod.Get); string executeAsync = await _httpRequestHandler.ReadAsStringAsync(httpRequestItem); return(JsonConvert.DeserializeObject <Link[]>(executeAsync)); }
protected override HttpRequestItem BuildRequest() { var req = HttpRequestItem.CreateGetRequest(ApiUrls.GetGroupInfo); req.AddQueryValue("gcode", _group.Code); req.AddQueryValue("vfwebqq", Session.Vfwebqq); req.AddQueryValue("t", Timestamp); req.Referrer = ApiUrls.ReferrerS; return(req); }
protected override HttpRequestItem BuildRequest() { var req = new HttpRequestItem(HttpMethodType.Post, ApiUrls.GetUuid); req.AddQueryValue("appid", ApiUrls.Appid); req.AddQueryValue("fun", "new"); req.AddQueryValue("lang", "zh_CN"); req.AddQueryValue("_", Session.Seq++); return(req); }
public async Task <OAuthToken> GetRequestTokenAsync() { string url; if (Config.Scope != null) { string serializedScope = Newtonsoft.Json.JsonConvert.SerializeObject(Config.Scope); url = string.Format("{0}?scope={1}", Consts.RequestToken, System.Net.WebUtility.UrlEncode(serializedScope)); } else { url = Consts.RequestToken; } string authzHeader = _authorizationHeader.CreateForRequest(Config.CallbackUrl, Config.ConsumerKey, Config.ConsumerSecret, url); var httpRequestItem = new HttpRequestItem { URL = url, HttpMethod = System.Net.Http.HttpMethod.Get, AuthzHeader = authzHeader, HttpContent = null, IsDataRequest = false }; var response = await _httpRequestHandler.ExecuteAsync(httpRequestItem).ConfigureAwait(false); var result = await response.Content.ReadAsStringAsync().ConfigureAwait(false); if (!response.IsSuccessStatusCode) { throw new ServerException((int)response.StatusCode, result); } if (string.IsNullOrEmpty(result)) { throw new ServerException((int)response.StatusCode, "Server returned an empty result"); } string[] kvpairs = result.Split('&'); System.Collections.Generic.Dictionary <string, string> parameters = System.Linq.Enumerable.ToDictionary(System.Linq.Enumerable.Select(kvpairs, pair => pair.Split('=')), kv => kv[0], kv => kv[1]); Config.Token = parameters["oauth_token"]; Config.TokenSecret = parameters["oauth_token_secret"]; var authCodeUri = new Uri(string.Format("{0}?oauth_token={1}", Consts.Authorize, Config.Token)); return(new OAuthToken { Token = Config.Token, TokenSecret = Config.TokenSecret, AuthCodeUri = authCodeUri }); }
public override HttpRequestItem BuildRequest() { var req = HttpRequestItem.CreateGetRequest(ApiUrls.GetDiscuzList); req.AddQueryValue("clientid", Session.ClientId); req.AddQueryValue("psessionid", Session.SessionId); req.AddQueryValue("vfwebqq", Session.Vfwebqq); req.AddQueryValue("t", Timestamp); req.Referrer = ApiUrls.ReferrerS; return(req); }