将指定Curl -G命令转换为完整Java代码的技术咨询
把Curl -G请求转换为完整的Java HttpURLConnection代码
首先先明确原curl命令的核心逻辑:这是一个GET请求(-G参数会把-d里的参数转为URL查询参数),通过Basic认证调用IBM Watson的自然语言理解API,传入指定的版本、文本、实体分析功能及自定义模型ID。
注意:原curl里的-d "the msg"应该是漏了参数名,Watson NLU的analyze接口需要指定text/url/html参数,这里我默认补为text="the msg",如果实际是其他参数你可以自行调整。
下面是补全并完善后的完整Java代码:
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.net.HttpURLConnection; import java.net.URL; import java.net.URLEncoder; import java.nio.charset.StandardCharsets; import java.util.Base64; public class WatsonNLURequest { public static void main(String[] args) throws IOException { // 配置参数,替换成你的实际值 String user = "{user}"; String pass = "{pass}"; String modelID = "{modelID}"; String apiUrl = "https://gateway.watsonplatform.net/natural-language-understanding/api/v1/analyze"; // 构建查询参数(对应curl里的-d参数,-G会自动转为GET查询串,这里手动拼接) StringBuilder queryParams = new StringBuilder(); queryParams.append("version=").append(URLEncoder.encode("2018-03-16", StandardCharsets.UTF_8.name())) .append("&text=").append(URLEncoder.encode("the msg", StandardCharsets.UTF_8.name())) .append("&features=").append(URLEncoder.encode("entities", StandardCharsets.UTF_8.name())) .append("&entities.model=").append(URLEncoder.encode(modelID, StandardCharsets.UTF_8.name())); // 拼接完整的请求URL String fullUrl = apiUrl + "?" + queryParams.toString(); URL url = new URL(fullUrl); HttpURLConnection connection = (HttpURLConnection) url.openConnection(); // 设置Basic认证 String userpass = user + ":" + pass; String basicAuth = "Basic " + Base64.getEncoder().encodeToString(userpass.getBytes(StandardCharsets.UTF_8)); connection.setRequestProperty("Authorization", basicAuth); // 指定请求方法为GET(对应curl的-G参数) connection.setRequestMethod("GET"); // 告诉API我们接受JSON格式的响应 connection.setRequestProperty("Accept", "application/json"); // 获取响应码,检查请求是否成功 int responseCode = connection.getResponseCode(); System.out.println("Response Code: " + responseCode); // 读取并拼接响应内容 BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream())); String inputLine; StringBuilder response = new StringBuilder(); while ((inputLine = in.readLine()) != null) { response.append(inputLine); } in.close(); // 打印响应结果 System.out.println("Response Body: " + response.toString()); // 关闭连接释放资源 connection.disconnect(); } }
关键细节说明:
- 参数编码:用
URLEncoder对参数值做UTF-8编码,避免空格、特殊字符导致的URL解析错误。 - Base64认证:使用Java 8+自带的
java.util.Base64类实现编码,如果是Java 7及以下版本,可以替换为javax.xml.bind.DatatypeConverter.printBase64Binary(userpass.getBytes())。 - 请求头配置:明确设置
Accept: application/json,确保API返回符合预期的JSON格式响应。 - 响应处理:通过
BufferedReader逐行读取响应流,拼接成完整的响应内容。
内容的提问来源于stack exchange,提问作者neo_free
相关产品推荐
相关产品推荐

