public async Task <Boolean> DeleteClientes(List <Cliente> listClientes) { var json = JsonConvert.SerializeObject(listClientes); var stringContent = new StringContent(json, UnicodeEncoding.UTF8, "application/json"); var result = await _client.PostAsync(_options.ApiUrl + "api/Clientes/ListClientes", stringContent); return(result.IsSuccessStatusCode); }
public async Task <string> GetEmailConfirmationToken(string userId) { var responceResult = await _httpClient.PostAsync($"api/users/{userId}/email/ConfirmationToken", null); if (responceResult.IsSuccessStatusCode) { string token = await responceResult.Content.ReadAsStringAsync(); return(RegexHelper.CleanHttpResponceString(token)); } return(String.Empty); }
public static async Task <string> GetLoginStatusAsync(string oauthKey) { string queryUrl = "https://passport.bilibili.com/qrcode/getLoginInfo"; NameValueCollection postValues = new NameValueCollection(); postValues.Add("oauthKey", oauthKey); postValues.Add("gourl", "https%3A%2F%2Fwww.bilibili.com%2F"); byte[] responseArray = await(await AppHttpClient.PostAsync(queryUrl, new FormUrlEncodedContent(postValues.ToDictionary()))).Content.ReadAsByteArrayAsync(); return(Encoding.UTF8.GetString(responseArray)); }
protected override async Task HandleEventAsync() { if (!string.IsNullOrWhiteSpace(NewItem.Text)) { ApiCallResult <ItemApiModel> itemCreationCallResult = await AppHttpClient .PostAsync <ItemApiModel>(ApiUrls.CreateItem, NewItem); Items.Add( itemCreationCallResult.IsSuccess ? itemCreationCallResult.Value ! : throw new Exception("API call is not successful") ); NewItem.Text = string.Empty; } }
public static async Task <int> Main(params string[] args) { ServicePointManager.DefaultConnectionLimit = 2048; ServicePointManager.ServerCertificateValidationCallback = (sender, certificate, chain, errors) => { return(true); }; var rootCommand = new RootCommand { new Argument <string>( "url", description: "视频地址 或 av|bv|BV|ep|ss"), new Option <bool>( new string[] { "--use-tv-api", "-tv" }, "使用TV端解析模式"), new Option <bool>( new string[] { "--use-app-api", "-app" }, "使用APP端解析模式"), new Option <bool>( new string[] { "--use-intl-api", "-intl" }, "使用国际版解析模式"), new Option <bool>( new string[] { "--use-mp4box" }, "使用MP4Box来混流"), new Option <bool>( new string[] { "--only-hevc", "-hevc" }, "只下载hevc编码"), new Option <bool>( new string[] { "--only-avc", "-avc" }, "只下载avc编码"), new Option <bool>( new string[] { "--only-show-info", "-info" }, "仅解析而不进行下载"), new Option <bool>( new string[] { "--hide-streams", "-hs" }, "不要显示所有可用音视频流"), new Option <bool>( new string[] { "--interactive", "-ia" }, "交互式选择清晰度"), new Option <bool>( new string[] { "--show-all" }, "展示所有分P标题"), new Option <bool>( new string[] { "--use-aria2c" }, "调用aria2c进行下载(你需要自行准备好二进制可执行文件)"), new Option <string>( new string[] { "--aria2c-proxy" }, "调用aria2c进行下载时的代理地址配置"), new Option <bool>( new string[] { "--multi-thread", "-mt" }, "使用多线程下载"), new Option <string>( new string[] { "--select-page", "-p" }, "选择指定分p或分p范围:(-p 8 或 -p 1,2 或 -p 3-5 或 -p ALL)"), new Option <bool>( new string[] { "--audio-only" }, "仅下载音频"), new Option <bool>( new string[] { "--video-only" }, "仅下载视频"), new Option <bool>( new string[] { "--sub-only" }, "仅下载字幕"), new Option <bool>( new string[] { "--no-padding-page-num" }, "不给分P序号补零"), new Option <bool>( new string[] { "--debug" }, "输出调试日志"), new Option <bool>( new string[] { "--skip-mux" }, "跳过混流步骤"), new Option <bool>( new string[] { "--skip-subtitle" }, "跳过字幕下载"), new Option <bool>( new string[] { "--skip-cover" }, "跳过封面下载"), new Option <string>( new string[] { "--language" }, "设置混流的音频语言(代码),如chi, jpn等"), new Option <string>( new string[] { "--cookie", "-c" }, "设置字符串cookie用以下载网页接口的会员内容"), new Option <string>( new string[] { "--access-token", "-token" }, "设置access_token用以下载TV/APP接口的会员内容"), new Option <string>( new string[] { "--work-dir" }, "设置程序的工作目录"), new Option <string>( new string[] { "--delay-per-page" }, "设置下载合集分P之间的下载间隔时间(单位: 秒, 默认无间隔)") }; Command loginCommand = new Command( "login", "通过APP扫描二维码以登录您的WEB账号"); rootCommand.AddCommand(loginCommand); Command loginTVCommand = new Command( "logintv", "通过APP扫描二维码以登录您的TV账号"); rootCommand.AddCommand(loginTVCommand); rootCommand.Description = "BBDown是一个免费且便捷高效的哔哩哔哩下载/解析软件."; rootCommand.TreatUnmatchedTokensAsErrors = true; //WEB登录 loginCommand.Handler = CommandHandler.Create(async delegate { try { Log("获取登录地址..."); string loginUrl = "https://passport.bilibili.com/qrcode/getLoginUrl"; string url = JsonDocument.Parse(await GetWebSourceAsync(loginUrl)).RootElement.GetProperty("data").GetProperty("url").ToString(); string oauthKey = GetQueryString("oauthKey", url); //Log(oauthKey); //Log(url); bool flag = false; Log("生成二维码..."); QRCodeGenerator qrGenerator = new QRCodeGenerator(); QRCodeData qrCodeData = qrGenerator.CreateQrCode(url, QRCodeGenerator.ECCLevel.Q); QRCode qrCode = new QRCode(qrCodeData); Bitmap qrCodeImage = qrCode.GetGraphic(7); qrCodeImage.Save("qrcode.png", System.Drawing.Imaging.ImageFormat.Png); Log("生成二维码成功:qrcode.png, 请打开并扫描"); while (true) { await Task.Delay(1000); string w = await GetLoginStatusAsync(oauthKey); string data = JsonDocument.Parse(w).RootElement.GetProperty("data").ToString(); if (data == "-2") { LogColor("二维码已过期, 请重新执行登录指令."); break; } else if (data == "-4") //等待扫码 { continue; } else if (data == "-5") //等待确认 { if (!flag) { Log("扫码成功, 请确认..."); flag = !flag; } } else { string cc = JsonDocument.Parse(w).RootElement.GetProperty("data").GetProperty("url").ToString(); Log("登录成功: SESSDATA=" + GetQueryString("SESSDATA", cc)); //导出cookie File.WriteAllText(Path.Combine(APP_DIR, "BBDown.data"), cc.Substring(cc.IndexOf('?') + 1).Replace("&", ";")); File.Delete("qrcode.png"); break; } } } catch (Exception e) { LogError(e.Message); } }); //TV登录 loginTVCommand.Handler = CommandHandler.Create(async delegate { try { string loginUrl = "https://passport.snm0516.aisee.tv/x/passport-tv-login/qrcode/auth_code"; string pollUrl = "https://passport.bilibili.com/x/passport-tv-login/qrcode/poll"; var parms = GetTVLoginParms(); Log("获取登录地址..."); byte[] responseArray = await(await AppHttpClient.PostAsync(loginUrl, new FormUrlEncodedContent(parms.ToDictionary()))).Content.ReadAsByteArrayAsync(); string web = Encoding.UTF8.GetString(responseArray); string url = JsonDocument.Parse(web).RootElement.GetProperty("data").GetProperty("url").ToString(); string authCode = JsonDocument.Parse(web).RootElement.GetProperty("data").GetProperty("auth_code").ToString(); Log("生成二维码..."); QRCodeGenerator qrGenerator = new QRCodeGenerator(); QRCodeData qrCodeData = qrGenerator.CreateQrCode(url, QRCodeGenerator.ECCLevel.Q); QRCode qrCode = new QRCode(qrCodeData); Bitmap qrCodeImage = qrCode.GetGraphic(7); qrCodeImage.Save("qrcode.png", System.Drawing.Imaging.ImageFormat.Png); Log("生成二维码成功:qrcode.png, 请打开并扫描"); parms.Set("auth_code", authCode); parms.Set("ts", GetTimeStamp(true)); parms.Remove("sign"); parms.Add("sign", GetSign(ToQueryString(parms))); while (true) { await Task.Delay(1000); responseArray = await(await AppHttpClient.PostAsync(pollUrl, new FormUrlEncodedContent(parms.ToDictionary()))).Content.ReadAsByteArrayAsync(); web = Encoding.UTF8.GetString(responseArray); string code = JsonDocument.Parse(web).RootElement.GetProperty("code").ToString(); if (code == "86038") { LogColor("二维码已过期, 请重新执行登录指令."); break; } else if (code == "86039") //等待扫码 { continue; } else { string cc = JsonDocument.Parse(web).RootElement.GetProperty("data").GetProperty("access_token").ToString(); Log("登录成功: AccessToken=" + cc); //导出cookie File.WriteAllText(Path.Combine(APP_DIR, "BBDownTV.data"), "access_token=" + cc); File.Delete("qrcode.png"); break; } } } catch (Exception e) { LogError(e.Message); } }); rootCommand.Handler = CommandHandler.Create <MyOption>(async(myOption) => { await DoWorkAsync(myOption); }); return(await rootCommand.InvokeAsync(args)); }