gpt4 book ai didi

java - 如何修复 java 中的 http 响应代码 400 错误?是否存在格式错误的请求语法或无效的请求消息框架?

转载 作者:行者123 更新时间:2023-11-30 10:04:11 25 4
gpt4 key购买 nike

我在 IBM Watson Studio 中创建了一个 ML 模型,并将该模型部署到网络服务中。我需要创建一个 java 程序来发送输入并从该网络服务中检索输出。
我检查了我所有的连接凭据,没有问题。
我在这里使用的代码与 watson-studio 中给出的代码相同(在部署部分下的实现选项卡中)我仍然遇到错误。
程序停在这一行

scoringBuffer = new BufferedReader(new InputStreamReader(scoringConnection.getInputStream()));

检查这段代码:-

package Original;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.nio.charset.StandardCharsets;
import java.util.Base64;
import java.util.HashMap;
import java.util.Map;

public class Iris_Deployment {

public static void main(String[] args) {
// NOTE: you must manually construct wml_credentials hash map below
// using information retrieved from your IBM Cloud Watson Machine Learning Service instance.

Map<String, String> wml_credentials = new HashMap<String, String>()
{{
put("url", "https://eu-gb.ml.cloud.ibm.com");
put("username", "my-username-comes-here");
put("password", "my-password-comes-here");
}};

String wml_auth_header = "Basic " +
Base64.getEncoder().encodeToString((wml_credentials.get("username") + ":" +
wml_credentials.get("password")).getBytes(StandardCharsets.UTF_8));
String wml_url = wml_credentials.get("url") + "/v3/identity/token";
HttpURLConnection tokenConnection = null;
HttpURLConnection scoringConnection = null;
BufferedReader tokenBuffer = null;
BufferedReader scoringBuffer = null;
try {
// Getting WML token
URL tokenUrl = new URL(wml_url);
tokenConnection = (HttpURLConnection) tokenUrl.openConnection();
tokenConnection.setDoInput(true);
tokenConnection.setDoOutput(true);
tokenConnection.setRequestMethod("GET");
tokenConnection.setRequestProperty("Authorization", wml_auth_header);
tokenBuffer = new BufferedReader(new InputStreamReader(tokenConnection.getInputStream()));
StringBuffer jsonString = new StringBuffer();
String line;
while ((line = tokenBuffer.readLine()) != null) {
jsonString.append(line);
}

// Scoring request
URL scoringUrl = new URL("https://eu-gb.ml.cloud.ibm.com/v3/wml_instances/3c523ca2-c5b5-409f-9773-7634c8bc5144/deployments/80b8046d-84e0-4081-a770-d10099c4a378/online");
String wml_token = "Bearer " +
jsonString.toString()
.replace("\"","")
.replace("}", "")
.split(":")[1];
scoringConnection = (HttpURLConnection) scoringUrl.openConnection();
scoringConnection.setDoInput(true);
scoringConnection.setDoOutput(true);
scoringConnection.setRequestMethod("POST");
scoringConnection.setRequestProperty("Accept", "application/json");
scoringConnection.setRequestProperty("Authorization", wml_token);
scoringConnection.setRequestProperty("Content-Type", "application/json; charset=UTF-8");
OutputStreamWriter writer = new OutputStreamWriter(scoringConnection.getOutputStream(), "UTF-8");

// NOTE: manually define and pass the array(s) of values to be scored in the next line
String payload = "{\"fields\": [\"SepalLengthCm\", \"SepalWidthCm\", \"PetalLengthCm\", \"PetalWidthCm\"], \"values\": [{1.2, 1.3, 2.2, 2.3}]}";
writer.write(payload);
writer.close();

scoringBuffer = new BufferedReader(new InputStreamReader(scoringConnection.getInputStream()));
StringBuffer jsonStringScoring = new StringBuffer();
String lineScoring;
while ((lineScoring = scoringBuffer.readLine()) != null) {
jsonStringScoring.append(lineScoring);
}
System.out.println(jsonStringScoring);
} catch (IOException e) {
System.out.println("The URL is not valid.");
e.printStackTrace();
}
finally {
if (tokenConnection != null) {
tokenConnection.disconnect();
}
if (tokenBuffer != null) {
try {
tokenBuffer.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (scoringConnection != null) {
scoringConnection.disconnect();
}
if (scoringBuffer != null) {
try {
scoringBuffer.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}

错误:-

The URL is not valid.
java.io.IOException: Server returned HTTP response code: 400 for URL: https://eu-gb.ml.cloud.ibm.com/v3/wml_instances/3c523ca2-c5b5-409f-9773-7634c8bc5144/deployments/80b8046d-84e0-4081-a770-d10099c4a378/online
at java.base/sun.net.www.protocol.http.HttpURLConnection.getInputStream0(HttpURLConnection.java:1913)
at java.base/sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1509)
at java.base/sun.net.www.protocol.https.HttpsURLConnectionImpl.getInputStream(HttpsURLConnectionImpl.java:245)
at Original.Iris_Deployment.main(Iris_Deployment.java:71)

Process finished with exit code 0

最佳答案

请尝试按如下方式传递您的评分有效载荷:

\"值\": [[1.2, 1.3, 2.2, 2.3]]

(将内部的“{”替换为“[”)

关于java - 如何修复 java 中的 http 响应代码 400 错误?是否存在格式错误的请求语法或无效的请求消息框架?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56011224/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com