Java Post to GoogleCloudMessaging返回400 InvalidTokenFormat

Java Post to GoogleCloudMessaging返回400 InvalidTokenFormat,java,google-cloud-messaging,Java,Google Cloud Messaging,我正试图发送到,但请求失败,响应为HTTP/1.1 400 InvalidTokenFormat 但是,如果我更改程序,使其连接到localhost,并且我只是将它发出的请求通过管道传输到其他东西,将请求传输到GCM,则请求成功。以下是失败的代码: import java.net.URL; import java.net.HttpURLConnection; import java.io.OutputStream; public class GcmPostMe { public sta

我正试图发送到,但请求失败,响应为HTTP/1.1 400 InvalidTokenFormat

但是,如果我更改程序,使其连接到localhost,并且我只是将它发出的请求通过管道传输到其他东西,将请求传输到GCM,则请求成功。以下是失败的代码:

import java.net.URL;
import java.net.HttpURLConnection;
import java.io.OutputStream;

public class GcmPostMe {
    public static void main (String[] args) {

        String data = "{\"to\":\" *** censored recipient token *** \"}";
        String type = "application/json";
        try {
            URL u = new URL("https://android.googleapis.com/gcm/send/");
            HttpURLConnection conn = (HttpURLConnection) u.openConnection();
            conn.setDoOutput(true);
            conn.setRequestMethod("POST");
            conn.setRequestProperty( "Authorization", "key=" + " *** censored api key *** " );
            conn.setRequestProperty( "Content-Type", type );
            conn.setRequestProperty( "Content-Length", String.valueOf(data.length()));
            OutputStream os = conn.getOutputStream();
            os.write(data.getBytes());
            System.out.println(conn.getResponseCode() + " " + conn.getResponseMessage() );
            conn.disconnect();
        } catch (Exception e) {
            System.err.println("Something went wrong");
        }
    }
}
当我将上面代码中的URL更改为“”并执行


在我运行程序之前。

好的,我发现了我的错误:路径是错误的,路径中的尾随
/
不知何故使它无法工作

执行HTTP POST to将提供HTTP/1.1 400 InvalidTokenFormat

使用HTTP/1.1 200 OK成功完成相同的POST to(不带尾随/)

以下工作:

import java.net.URL;
import java.net.HttpURLConnection;
import java.io.OutputStream;

public class GcmPostMe {
    public static void main (String[] args) {

        String data = "{\"to\":\" *** censored recipient token *** \"}";
        String type = "application/json";
        try {
            URL u = new URL("https://android.googleapis.com/gcm/send");
            HttpURLConnection conn = (HttpURLConnection) u.openConnection();
            conn.setDoOutput(true);
            conn.setRequestMethod("POST");
            conn.setRequestProperty( "Authorization", "key=" + " *** censored api key *** " );
            conn.setRequestProperty( "Content-Type", type );
            conn.setRequestProperty( "Content-Length", String.valueOf(data.length()));
            OutputStream os = conn.getOutputStream();
            os.write(data.getBytes());
            System.out.println(conn.getResponseCode() + " " + conn.getResponseMessage() );
            conn.disconnect();
        } catch (Exception e) {
            System.err.println("Something went wrong");
        }
    }
}
import java.net.URL;
import java.net.HttpURLConnection;
import java.io.OutputStream;

public class GcmPostMe {
    public static void main (String[] args) {

        String data = "{\"to\":\" *** censored recipient token *** \"}";
        String type = "application/json";
        try {
            URL u = new URL("https://android.googleapis.com/gcm/send");
            HttpURLConnection conn = (HttpURLConnection) u.openConnection();
            conn.setDoOutput(true);
            conn.setRequestMethod("POST");
            conn.setRequestProperty( "Authorization", "key=" + " *** censored api key *** " );
            conn.setRequestProperty( "Content-Type", type );
            conn.setRequestProperty( "Content-Length", String.valueOf(data.length()));
            OutputStream os = conn.getOutputStream();
            os.write(data.getBytes());
            System.out.println(conn.getResponseCode() + " " + conn.getResponseMessage() );
            conn.disconnect();
        } catch (Exception e) {
            System.err.println("Something went wrong");
        }
    }
}