You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java调用MeteoMatics Weather API如何传递用户名与密码?

解决MeteoMatics API身份认证问题(Java 11+ HttpClient)

MeteoMatics API要求使用HTTP Basic认证,你需要在请求中加入用户名和密码的认证信息才能通过校验。下面是两种可行的修改方案:

方案1:直接添加Authorization请求头

手动将用户名和密码编码为Base64格式,然后添加到请求头中:

import java.nio.charset.StandardCharsets;
import java.util.Base64;
import java.time.LocalDate;
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;

try {
    LocalDate date = LocalDate.now();
    String username = "你的MeteoMatics用户名";
    String password = "你的MeteoMatics密码";
    
    // 对用户名密码进行Base64编码
    String authCredentials = username + ":" + password;
    byte[] encodedAuth = Base64.getEncoder().encode(authCredentials.getBytes(StandardCharsets.UTF_8));
    String authHeader = "Basic " + new String(encodedAuth);

    String meteoAPIURl = "https://api.meteomatics.com/" + date + "/" + "t_2m:C" + "/" + latitude + "," + longitude + "/" + "json";
    HttpClient meteoMaticsClient = HttpClient.newHttpClient();
    HttpRequest meteoMaticsRequest = HttpRequest.newBuilder()
            .uri(URI.create(meteoAPIURl))
            .header("Authorization", authHeader) // 加入认证头
            .build();

    System.out.println("MetroMatics API URl: " + meteoAPIURl);

    HttpResponse<String> meteoResponse = meteoMaticsClient.send(meteoMaticsRequest, HttpResponse.BodyHandlers.ofString());
    String meteomaticsResponseBody = meteoResponse.body();

    System.out.println("Meteomatics API Response: " + meteomaticsResponseBody);
} catch (Exception e) {
    e.printStackTrace();
}

方案2:使用HttpClient全局配置认证

如果需要多次调用该API,可以给HttpClient配置全局认证器,避免重复编码操作:

import java.time.LocalDate;
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.net.Authenticator;
import java.net.PasswordAuthentication;

try {
    LocalDate date = LocalDate.now();
    String username = "你的MeteoMatics用户名";
    String password = "你的MeteoMatics密码";

    // 配置带认证的HttpClient
    HttpClient meteoMaticsClient = HttpClient.newBuilder()
            .authenticator(new Authenticator() {
                @Override
                protected PasswordAuthentication getPasswordAuthentication() {
                    return new PasswordAuthentication(username, password.toCharArray());
                }
            })
            .build();

    String meteoAPIURl = "https://api.meteomatics.com/" + date + "/" + "t_2m:C" + "/" + latitude + "," + longitude + "/" + "json";
    HttpRequest meteoMaticsRequest = HttpRequest.newBuilder()
            .uri(URI.create(meteoAPIURl))
            .build();

    System.out.println("MetroMatics API URl: " + meteoAPIURl);

    HttpResponse<String> meteoResponse = meteoMaticsClient.send(meteoMaticsRequest, HttpResponse.BodyHandlers.ofString());
    String meteomaticsResponseBody = meteoResponse.body();

    System.out.println("Meteomatics API Response: " + meteomaticsResponseBody);
} catch (Exception e) {
    e.printStackTrace();
}

关键提醒

  • 请将代码中的你的MeteoMatics用户名和你的MeteoMatics密码替换为你实际的认证信息
  • HTTP Basic认证仅对信息做Base64编码而非加密,好在MeteoMatics API已经使用HTTPS传输,无需额外担心明文泄露
  • 确保代码中引入了对应依赖包(方案1需要Base64和StandardCharsets,方案2需要Authenticator相关类)

内容的提问来源于stack exchange,提问作者jfc9419

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 20:10:18