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

将指定Python HTTP请求代码片段转换为等价Java代码

将Python HTTP请求代码转换为等价Java代码

先看你提供的Python代码片段,核心是通过OAuth2客户端凭证模式获取访问令牌,用到了Basic认证和POST请求。下面是对应的Java实现,我选用了业界常用的OkHttp库(轻量化且易用):

原Python代码片段(补全关键逻辑)

import requests
from requests.auth import HTTPBasicAuth

SELDON_API_IP="35.192.98.23"

def get_token():
    payload = {'grant_type': 'client_credentials'}
    response = requests.post(
        "http://{}:8080/oauth/token".format(SELDON_API_IP),
        auth=HTTPBasicAuth('oauth-key', 'oauth-secret'),
        data=payload
    )
    response.raise_for_status()  # 抛出HTTP错误
    return response.json()

等价Java代码(使用OkHttp)

首先需要添加OkHttp依赖(如果用Maven管理项目):

<dependency>
    <groupId>com.squareup.okhttp3</groupId>
    <artifactId>okhttp</artifactId>
    <version>4.12.0</version>
</dependency>

然后是具体的Java实现:

import okhttp3.*;
import java.io.IOException;
import java.util.Base64;

public class TokenFetcher {
    private static final String SELDON_API_IP = "35.192.98.23";
    private static final String OAUTH_KEY = "oauth-key";
    private static final String OAUTH_SECRET = "oauth-secret";
    private static final OkHttpClient client = new OkHttpClient();

    public static String getToken() throws IOException {
        // 手动构建Basic认证头(Python的HTTPBasicAuth自动做了这一步)
        String credentials = OAUTH_KEY + ":" + OAUTH_SECRET;
        String base64Credentials = Base64.getEncoder().encodeToString(credentials.getBytes());
        String authHeader = "Basic " + base64Credentials;

        // 构建表单请求体,对应Python的data参数
        RequestBody formBody = new FormBody.Builder()
                .add("grant_type", "client_credentials")
                .build();

        // 组装并发送POST请求
        Request request = new Request.Builder()
                .url(String.format("http://%s:8080/oauth/token", SELDON_API_IP))
                .header("Authorization", authHeader)
                .post(formBody)
                .build();

        // 处理响应,模拟Python的raise_for_status()逻辑
        try (Response response = client.newCall(request).execute()) {
            if (!response.isSuccessful()) {
                throw new IOException("请求失败: " + response.code() + " " + response.message());
            }
            // 返回原始JSON字符串,可按需用Jackson等库解析为Java对象
            return response.body().string();
        }
    }

    public static void main(String[] args) {
        try {
            String token = getToken();
            System.out.println("获取到的令牌: " + token);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

关键细节说明

  • Java没有像Python requests那样的内置HTTP库,这里选用OkHttp是因为它性能好、API简洁;你也可以根据项目技术栈换成Spring RestTemplate或Apache HttpClient
  • 如果需要解析JSON响应,可以引入Jackson库,把返回的字符串转换成自定义POJO类,示例依赖:
    <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-databind</artifactId>
        <version>2.15.2</version>
    </dependency>
    
  • 代码中用try-with-resources自动关闭响应体,避免资源泄漏,这是Java的最佳实践

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 08:12:47