当前位置: 首页 > 知识库问答 >
问题:

同时发送多个API请求,每个API调用请求使用不同的授权标头Java

江英卓
2023-03-14

我正在努力同时发送多个API请求,以下是我为同时发送多个API调用所做的步骤:

  1. 创建具有40个授权值的哈希映射
  2. 迭代hashmap,以便为每个调用检索不同的授权值

我知道如何按顺序制作,我希望能够用线程来制作。

这是我的代码:

private void createUsers() throws ApiException {
    AuthAPI authAPI = new AuthAPI(HOST);
    usersMap = new HashMap<>();
    for (int i = 0; i < 40 - 1; i++) {
        String USER_NAME = "Introductory Content User " + StringUtils.getRandomString(5, true, false);
        usersAPIUnitTest.createUser(USER_NAME, UserRole.ADMIN, "", "", "");
        String email = UsersAPIUnitTest.getEmail();
        System.out.println(email);
        String userToken = authAPI.generateToken(email);
        usersMap.put(USER_NAME, userToken);
    }
}

然后我使用此方法发送api调用:

public void sendMultipleAPIRequests() throws IOException {
        for(Map.Entry mapElement : usersMap.entrySet()){
            LabAPIChecker labAPIChecker = new LabAPIChecker(HOST, mapElement.getValue());
            JsonObject jsonObject = labAPIChecker.launchLabGetRequest();//this line perform simple 'get' request
        }
        
    }

共有2个答案

陆宏扬
2023-03-14

@michael-gantman建议下的结果代码:

public void sendMultipleAPIRequests() throws IOException 
{
    ExecutorService executorService = Executors.newFixedThreadPool(10); // max 10 concurrent threads
    for (Map.Entry mapElement : usersMap.entrySet()) {
        Runnable thread = () -> {
          LabAPIChecker labAPIChecker = new LabAPIChecker(HOST, mapElement.getValue());
          JsonObject jsonObject = labAPIChecker.launchLabGetRequest();
        };
        executorService.execute(thread);
     }
     executorService.shutdown(); 
 }

所有功劳都归于迈克尔·甘特曼

羊舌兴德
2023-03-14

您可以使用标准java工具来完成这一切。您需要使用ScheduledExecutorService,或者可能只是一个执行器服务(ExecutorService),以获得一次性[Executors]class2的距离。您需要创建(或修改)自己的类来实现Runnable接口,其中方法run()将负责发送单个请求。然后,您需要将所有可运行文件提交给ScheduledExecutorService以同时运行。将线程数设置为可运行的线程数,它们将同时运行

 类似资料:
  • 我正在使用以下代码发送GET api请求。下面的url有一个参数,例如字符串url=”https://my/api“variable”test。我使用for循环遍历变量列表(超过2000个),并创建url以使用以下代码发送get API请求。我想并行发送多个API请求以减少总时间。请建议最好的方法。

  • 我已经为此挠头两天了。我使用WebAPI版本2.2和我使用CORS。这个设置工作在服务器端,我被允许从我的web客户端服务器代码获得授权的内容,但在我的ajax调用中获得未经授权的内容。 以下是我的配置: Web API配置 WebApiConfig: Startup.Auth.cs: (我已经尝试了app.UseCors(CorsOptions.AllowAll)和config.EnableCo

  • 我正在尝试从这个 API 调用中创建“UUID”,我正在使用 axios 和 vue.js。这是我的源代码。 但不幸的是,我得到了 在'访问XMLHttpRequesthttps://www.uuidtools.com/api/generate/v1'从原点'http://localhost:8080'已被CORS策略阻止:对飞行前请求的响应未通过访问控制检查:请求的资源上不存在“access c

  • 这是在收到以db为单位的帖子列表后发送带有每个帖子链接数据的POST请求的代码。 在使用每个链接请求帖子后,从回复中提取playerCount并将其更新到每个帖子。 我在这段代码中使用Resttemplate,但有一个问题需要花费太长时间。 所以我想把这个代码改为一次发送一个请求,并在所有请求完成后更新每个帖子。 我怎样才能把这个代码转换成我想要的? 我将使用此代码作为计划任务。

  • 问题内容: 我想知道如何一次获取多个GET URL,然后将获取的JSON数据放入我的React DOM元素中。 这是我的代码: 但是,我想从服务器中获取其他JSON数据,然后使用传递到其中的所有这些JSON数据呈现我的ReactDOM。例如: 这可能吗?如果不是,将多个JSON数据提取到我的渲染ReactDOM元素中的其他解决方案是什么? 问题答案: 您可以在解决方案之前依靠Promises来执行

  • 我正在尝试连接到FatSecret API。这是他们为oauth2授权提供的留档链接:https://platform.fatsecret.com/api/Default.aspx?screen=rapiauth2#using-token-api 我已经完成了第一步和第二步,现在我被困在第三步。我已经设法用“application/json”更新了标题,但我不确定我的调用是否包括我创建的令牌。我得