将指定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
相关产品推荐
相关产品推荐

