Как написать асинхронный запрос get для API - PullRequest
0 голосов
/ 19 февраля 2019

Я получил доступ к API, и у меня есть несколько файлов, которые я хочу отправить в API для анализа.Ответы сохраняются в формате json на моем жестком диске, и я хотел бы, чтобы они сохранялись с разными именами файлов.

Я хотел бы отправлять один файл каждые 3 секунды, чтобы не разбить ихсервер.Я знаю, как сделать это для одного файла, но не знаю, как автоматизировать это для многих файлов.

Я загрузил аудиофайлы с именами: www.xyz.com/myaudiofile1, www.xyz.com/myaudiofile2,www.xyz.com/myaudiofile3.

Я использую Visual Studio имой единственный запрос:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Net.Http;
using System.IO;
using RestSharp;
using RestSharp.Authenticators;

namespace TestAudio
{
    class Program
    {
        static void Main(string[] args)
        {  try
            {
                var ClientEndpoint = "https://website ";
    var audiofile = "https://myaudiofile1 ";
    var client = new RestClient(ClientEndpoint + audiofile);
    var request = new RestRequest(Method.GET);
    request.AddHeader("cache-control", "no-cache");
    request.AddHeader("Login", "Login Key");
    IRestResponse response = client.Execute(request);
    System.IO.File.WriteAllText(@"C:\Users\myaudiofile1.json",response.Content);
    Console.WriteLine(response.Content.ToString());
    Console.ReadLine();
}
catch (Exception ex)
{
    Console.WriteLine(ex.ToString());
}

}

1 Ответ

0 голосов
/ 19 февраля 2019

Если вы используете Microsoft Reactive Framework (он же Rx), вы можете сделать это:

var files = new[] { "myaudiofile1", "myaudiofile2", "myaudiofile3" };

var query =
    Observable
        .Timer(TimeSpan.Zero, TimeSpan.FromSeconds(3.0))
        .Zip(files, (_, audiofile) => audiofile)
        .Select(audiofile =>
        {
            var ClientEndpoint = "https://website ";
            var client = new RestClient(ClientEndpoint + audiofile);
            var request = new RestRequest(Method.GET);
            request.AddHeader("cache-control", "no-cache");
            request.AddHeader("Login", "Login Key");
            IRestResponse response = client.Execute(request);
            return (audiofile, response.Content);
        });

var subscription =
    query
        .Subscribe(x => System.IO.File.WriteAllText($@"C:\Users\{x.audiofile}.json", x.Content));

Было бы полезно узнать, какие объекты доступны, поскольку это изменило бы способ написания этого кода.

Просто NuGet System.Reactive и добавьте using System.Reactive.Linq;, чтобы все заработало.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...