internal VkResponse Call(string methodName, VkParameters parameters, bool skipAuthorization = false, string apiVersion = null) { var stackTrace = new StackTrace(); MethodBase methodBase = stackTrace.GetFrame(1).GetMethod(); var attributes = methodBase.GetCustomAttributes(typeof(ApiVersionAttribute), true); if (attributes.Length > 0) { var version = ((ApiVersionAttribute)attributes[0]).Version; parameters.Add("v", version); } if (!parameters.ContainsKey("v")) { if (!string.IsNullOrEmpty(apiVersion)) { parameters.Add("v", apiVersion); } else { //TODO: WARN: раскомментировать после добавления аннотаций ко всем методам //throw new InvalidParameterException("You must use ApiVersionAttribute except adding \"v\" parameter to VkParameters"); } } else { //TODO: WARN: раскомментировать, исправив ошибки в существующем коде //throw new InvalidParameterException("You must use ApiVersionAttribute except adding \"v\" parameter to VkParameters"); } return(Call(methodName, parameters, skipAuthorization)); }
internal VkResponse Call(string methodName, VkParameters parameters, bool skipAuthorization = false, string apiVersion = null) { if (!parameters.ContainsKey("v")) { parameters.Add("v", !string.IsNullOrEmpty(apiVersion) ? apiVersion : VkApiVersion); } return(Call(methodName, parameters, skipAuthorization)); }
public async Task <JToken> CallAsync(Uri uri, VkParameters parameters, CancellationToken cancellationToken = default) { if (!parameters.ContainsKey("v")) { parameters.Add("v", _versionManager.Version); } var response = await _captchaHandler.Perform((sid, key) => { parameters.Add("captcha_sid", sid); parameters.Add("captcha_key", key); return(InvokeAsyncInternal(uri, parameters, cancellationToken).ConfigureAwait(false)); }); return(JToken.Parse(response)); }
/// <summary> /// Базовое обращение к vk.com /// </summary> /// <param name="vkApi">VkNet Api</param> /// <param name="parameters"> Параметры запроса </param> /// <param name="server">Сервер запроса</param> /// <returns> Ответ от vk.com в формате json </returns> /// <exception cref="CaptchaNeededException"> Требуется ввести капчу </exception> private static string CallBase(VkApi vkApi, VkParameters parameters, string server) { if (!parameters.ContainsKey(key: "v")) { parameters.Add(name: "v", value: vkApi.VkApiVersion.Version); } if (_logger == null && !_isLoggerNull) { _logger = ReflectionHelper.GetPrivateField <ILogger>(vkApi, "_logger"); } if (_logger == null) { _isLoggerNull = true; } _logger?.Debug(message: $"Вызов GetBotsLongPollHistory, с параметрами {string.Join(separator: ",", values: parameters.Select(selector: x => $"{x.Key}={x.Value}"))}");
internal VkResponse Call(string methodName, VkParameters parameters, bool skipAuthorization = false, string apiVersion = null) { if (!parameters.ContainsKey("v")) { if (!string.IsNullOrEmpty(apiVersion)) { parameters.Add("v", apiVersion); } else { //TODO: WARN: раскомментировать после добавления аннотаций ко всем методам //throw new InvalidParameterException("You must use ApiVersionAttribute except adding \"v\" parameter to VkParameters"); } } else { //TODO: WARN: раскомментировать, исправив ошибки в существующем коде //throw new InvalidParameterException("You must use ApiVersionAttribute except adding \"v\" parameter to VkParameters"); } return(Call(methodName, parameters, skipAuthorization)); }
public VkResponse Call(string methodName, VkParameters parameters, bool skipAuthorization = false) { if (!parameters.ContainsKey("v")) { parameters.Add("v", VkApiVersion); } string answer = null; if (_captchaSolver == null) { answer = Invoke(methodName, parameters, skipAuthorization); } else { var numberOfRemainingAttemptsToSolveCaptcha = MaxCaptchaRecognitionCount; var numberOfRemainingAttemptsToCall = MaxCaptchaRecognitionCount + 1; long? captchaSidTemp = null; string captchaKeyTemp = null; var callCompleted = false; do { try { parameters.Add("captcha_sid", captchaSidTemp); parameters.Add("captcha_key", captchaKeyTemp); numberOfRemainingAttemptsToCall--; answer = Invoke(methodName, parameters, skipAuthorization); callCompleted = true; } catch (CaptchaNeededException captchaNeededException) { // Если мы обрабатываем исключение не первый раз, сообщаем решателю капчи // об ошибке распознавания предыдущей капчи if (numberOfRemainingAttemptsToSolveCaptcha < MaxCaptchaRecognitionCount) { _captchaSolver?.CaptchaIsFalse(); } if (numberOfRemainingAttemptsToSolveCaptcha <= 0) { continue; } captchaSidTemp = captchaNeededException.Sid; captchaKeyTemp = _captchaSolver?.Solve(captchaNeededException.Img?.AbsoluteUri); numberOfRemainingAttemptsToSolveCaptcha--; } } while (numberOfRemainingAttemptsToCall > 0 && !callCompleted); // Повторно выбрасываем исключение, если капча ни разу не была распознана верно if (!callCompleted && captchaSidTemp.HasValue) { throw new CaptchaNeededException(captchaSidTemp.Value, captchaKeyTemp); } } var json = JObject.Parse(answer); var rawResponse = json["response"]; return(new VkResponse(rawResponse) { RawJson = answer }); }
internal VkResponse Call(string methodName, VkParameters parameters, bool skipAuthorization = false, string apiVersion = null) { if (!parameters.ContainsKey("v")) { if (!string.IsNullOrEmpty(apiVersion)) parameters.Add("v", apiVersion); else { //TODO: WARN: раскомментировать после добавления аннотаций ко всем методам //throw new InvalidParameterException("You must use ApiVersionAttribute except adding \"v\" parameter to VkParameters"); } } else { //TODO: WARN: раскомментировать, исправив ошибки в существующем коде //throw new InvalidParameterException("You must use ApiVersionAttribute except adding \"v\" parameter to VkParameters"); } return Call(methodName, parameters, skipAuthorization); }
public VkResponse Call(string methodName, VkParameters parameters, bool skipAuthorization = false) { if (!parameters.ContainsKey("v")) { parameters.Add("v", VkApiVersion); } string answer = null; if (_captchaSolver == null) { answer = Invoke(methodName, parameters, skipAuthorization); } else { var numberOfRemainingAttemptsToSolveCaptcha = MaxCaptchaRecognitionCount; var numberOfRemainingAttemptsToCall = MaxCaptchaRecognitionCount + 1; long? captchaSidTemp = null; string captchaKeyTemp = null; var callCompleted = false; do { try { parameters.Add("captcha_sid", captchaSidTemp); parameters.Add("captcha_key", captchaKeyTemp); numberOfRemainingAttemptsToCall--; answer = Invoke(methodName, parameters, skipAuthorization); callCompleted = true; } catch (CaptchaNeededException captchaNeededException) { // Если мы обрабатываем исключение не первый раз, сообщаем решателю капчи // об ошибке распознавания предыдущей капчи if (numberOfRemainingAttemptsToSolveCaptcha < MaxCaptchaRecognitionCount) { _captchaSolver?.CaptchaIsFalse(); } if (numberOfRemainingAttemptsToSolveCaptcha <= 0) { continue; } captchaSidTemp = captchaNeededException.Sid; captchaKeyTemp = _captchaSolver?.Solve(captchaNeededException.Img?.AbsoluteUri); numberOfRemainingAttemptsToSolveCaptcha--; } } while (numberOfRemainingAttemptsToCall > 0 && !callCompleted); // Повторно выбрасываем исключение, если капча ни разу не была распознана верно if (!callCompleted && captchaSidTemp.HasValue) { throw new CaptchaNeededException(captchaSidTemp.Value, captchaKeyTemp); } } var json = JObject.Parse(answer); var rawResponse = json["response"]; return new VkResponse(rawResponse) { RawJson = answer }; }
internal VkResponse Call(string methodName, VkParameters parameters, bool skipAuthorization = false, string apiVersion = null) { if (!parameters.ContainsKey("v")) { parameters.Add("v", !string.IsNullOrEmpty(apiVersion) ? apiVersion : VkApiVersion); } return Call(methodName, parameters, skipAuthorization); }