405 Method Not Allowed是HTTP协议中的一个状态码,表示服务器知道请求方法(如POST),但目标资源不支持该方法。
首先确认API端点确实支持POST方法,并检查请求URL是否正确。
import java.net.HttpURLConnection;
import java.net.URL;
import java.io.OutputStream;
import java.io.BufferedReader;
import java.io.InputStreamReader;
public class ApiPostExample {
public static void main(String[] args) {
try {
URL url = new URL("https://api.example.com/endpoint");
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
// 设置请求方法为POST
conn.setRequestMethod("POST");
// 设置必要的请求头
conn.setRequestProperty("Content-Type", "application/json");
conn.setRequestProperty("Accept", "application/json");
// 如果需要认证
// conn.setRequestProperty("Authorization", "Bearer your_token");
// 允许输出
conn.setDoOutput(true);
// 准备请求体
String jsonInputString = "{\"key\":\"value\"}";
// 发送请求体
try(OutputStream os = conn.getOutputStream()) {
byte[] input = jsonInputString.getBytes("utf-8");
os.write(input, 0, input.length);
}
// 获取响应码
int responseCode = conn.getResponseCode();
System.out.println("Response Code: " + responseCode);
// 读取响应
try(BufferedReader br = new BufferedReader(
new InputStreamReader(conn.getInputStream(), "utf-8"))) {
StringBuilder response = new StringBuilder();
String responseLine = null;
while ((responseLine = br.readLine()) != null) {
response.append(responseLine.trim());
}
System.out.println("Response: " + response.toString());
}
conn.disconnect();
} catch (Exception e) {
e.printStackTrace();
}
}
}
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.time.Duration;
public class HttpClientExample {
public static void main(String[] args) {
HttpClient client = HttpClient.newBuilder()
.version(HttpClient.Version.HTTP_1_1)
.connectTimeout(Duration.ofSeconds(10))
.build();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://api.example.com/endpoint"))
.header("Content-Type", "application/json")
.header("Accept", "application/json")
//.header("Authorization", "Bearer your_token")
.POST(HttpRequest.BodyPublishers.ofString("{\"key\":\"value\"}"))
.build();
try {
HttpResponse<String> response = client.send(
request, HttpResponse.BodyHandlers.ofString());
System.out.println("Status Code: " + response.statusCode());
System.out.println("Response Body: " + response.body());
} catch (Exception e) {
e.printStackTrace();
}
}
}
import okhttp3.*;
public class OkHttpExample {
public static void main(String[] args) {
OkHttpClient client = new OkHttpClient();
MediaType JSON = MediaType.get("application/json; charset=utf-8");
String json = "{\"key\":\"value\"}";
RequestBody body = RequestBody.create(json, JSON);
Request request = new Request.Builder()
.url("https://api.example.com/endpoint")
.post(body)
.addHeader("Content-Type", "application/json")
//.addHeader("Authorization", "Bearer your_token")
.build();
try (Response response = client.newCall(request).execute()) {
System.out.println("Response Code: " + response.code());
System.out.println("Response Body: " + response.body().string());
} catch (Exception e) {
e.printStackTrace();
}
}
}
405错误通常出现在以下场景:
通过以上方法和调试步骤,你应该能够定位并解决Java中获取API POST请求返回405状态码的问题。
没有搜到相关的文章