代码之家  ›  专栏  ›  技术社区  ›  kou

发生httpsurlconnection 400错误请求错误

  •  -1
  • kou  · 技术社区  · 6 年前
    我需要将SWIFT代码转换为Java。 SWIFT代码有效。 但是,Java代码不起作用。

    httpsurlconnection失败。

    responseCode:400(httpsurlConnection.getResponseCode())

    消息2:错误请求(httpsurlConnection.getResponseMessage())

    如何解决400个错误的请求错误。

    以迅捷的速度

    func sendnotification(token:string,message:string){
    
    //FireBase CloudMessaging服务器密钥
    var firebaseserverkey=“aaaaa 6qlps4:apa91be7szgaggp3qygojsrssrm1inhigf5fq1x3xx”
    
    让url=url(字符串:“https://fcm.googleapis.com/fcm/send”)!
    var请求=urlRequest(url:url)
    request.setvalue(“application/json”,forhttpheaderfield:“内容类型”)
    
    request.setvalue(“key=\(firebaseserverkey)”,forhttpheaderfield:“授权”)
    request.httpmethod=“发布”
    
    request.httpbody=“\”to\“:\”(token)\“,\”notification\“:\”body\“:\”(message)\“,\”badge\“:\”1\“”。数据(使用.utf8)
    
    }
    < /代码> 
    
    

    我用Java编写(未工作)

    private void sendnotification(字符串标记,字符串消息){
    //FireBase CloudMessaging服务器密钥
    var firebaseserverkey=“aaaaa 6qlps4:apa91be7szgaggp3qygojsrssrm1inhigf5fq1x3xx”
    
    试试看{
    url url=new url(“https://fcm.googleapis.com/fcm/send”);
    httpsurlConnection conn=(httpsurlConnection)url.openConnection();
    conn.setreadtimeout(10000);
    连接设置连接超时(15000);
    conn.setrequestmethod(“post”);
    conn.setdoinput(真);
    conn.setdooutput(真);
    conn.setrequestproperty(“内容类型”,“应用程序/json”);
    conn.setrequestproperty(“授权”,“key=”+firebaseserverkey);
    
    
    string str=“\”to \“:”+token+“,\”notification\“:\”body\“:”+message+“,\”badge\“:\”1\“”;
    
    
    byte[]输出bytes=str.getbytes(“utf-8”);
    outputstream os=conn.getOutputstream();
    os.write(输出字节);
    关闭();
    
    int responseCode=conn.getResponseCode();//responseCode:400
    
    if(responseCode==httpsurlConnection.http_OK){
    log.d(“成功”,string.valueof(responseCode));
    }否则{
    字符串代码=string.valueof(responseCode);
    string message2=conn.getResponseMessage();//message2:请求错误
    log.d(“失败”,string.valueof(responseCode));
    log.d(“fail2”,conn.getResponseMessage());
    }
    }
    < /代码> 
    
    

    .

    消息2:错误请求(httpsurlConnection.getResponseMessage())

    如何解决400个错误的请求。

    在斯威夫特(它工作)

    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());
            }
    }
    

    1 回复  |  直到 6 年前
        1
  •  0
  •   Android_K.Doe    6 年前

    您的JSON请求主体不正确。它生产 {"to": zxc} 这是无效的JSON。把它改成

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