首页 > 解决方案 > 发生 HttpsURLConnection 400 Bad Request 错误

问题描述

我需要将以下 Swift 代码转换为 Java。Swift 代码有效。但是,Java 代码不起作用。

HttpsURLConnection 失败。

responseCode: 400 (HttpsURLConnection.getResponseCode())

message2:错误请求(HttpsURLConnection.getResponseMessage())

如何解决 400 Bad Request 错误。

在斯威夫特(它工作)

func sendNotification(token: String, message: String) {

 //Firebase CloudMessaging serverkey
    var firebaseServerKey = "AAAAA6qLps4:APA91bE7szGAgp3qYGOJsrSsrM1InhIgf5Fq1xxxxxx"

    let url = URL(string: "https://fcm.googleapis.com/fcm/send")!
    var request = URLRequest(url: url)
    request.setValue("application/json", forHTTPHeaderField: "Content-Type")

    request.setValue("key=\(firebaseServerKey)", forHTTPHeaderField: "Authorization")
    request.httpMethod = "POST"

    request.httpBody = "{\"to\":\"\(token)\",\"notification\":{\"body\":\"\(message)\",\"badge\":\"1\"}}".data(using: .utf8)

}

我用JAVA写的(没用)

private void sendNotification(String token, String message) {
//Firebase CloudMessaging serverkey
    var firebaseServerKey = "AAAAA6qLps4:APA91bE7szGAgp3qYGOJsrSsrM1InhIgf5Fq1xxxxxx"

    try {
        URL url = new URL("https://fcm.googleapis.com/fcm/send");
        HttpsURLConnection conn = (HttpsURLConnection) url.openConnection();
        conn.setReadTimeout(10000);
        conn.setConnectTimeout(15000);
        conn.setRequestMethod("POST");
        conn.setDoInput(true);
        conn.setDoOutput(true);
        conn.setRequestProperty("Content-Type", "application/json");
        conn.setRequestProperty("Authorization", "key="+firebaseServerKey);


        String str = "{\"to\": " + token + ", \"notification\": { \"body\": " + message + ", \"badge\": \"1\"}}";


        byte[] outputInBytes = str.getBytes("UTF-8");
        OutputStream os = conn.getOutputStream();
        os.write(outputInBytes);
        os.close();

        int responseCode = conn.getResponseCode(); // responseCode: 400

        if (responseCode == HttpsURLConnection.HTTP_OK) {
            Log.d("Success", String.valueOf(responseCode));
        } else {
            String code = String.valueOf(responseCode);
            String message2 = conn.getResponseMessage(); // message2: Bad Request
            Log.d("Fail", String.valueOf(responseCode));
            Log.d("Fail2", conn.getResponseMessage());
        }
}

在此处输入图像描述

标签: javaandroidiosswiftfirebase

解决方案


您的 JSON 请求正文不正确。它产生{"to": zxc}无效的json。将其更改为

String str = "{\"to\": \"" + token + "\", \"notification\": { \"body\": \"" +
    message + "\", \"badge\": \"1\"}}";

推荐阅读