首页 > 解决方案 > https:授权401

问题描述

我正在尝试建立与 API 的连接,该连接由标头和令牌保护。我已经设置了一个代码,我自己看不到任何错误,现在我碰壁了。我不想做的是从 URL 中获取一些 JSON 数据,但我收到了这条消息:

“服务器返回 HTTP 响应代码:URL 的 401:...”

我展示的代码已经过从不安全的 API 获取 JSON 的测试,并且可以正常工作。

public static void main(String[] args) {

        String jsonText = "";

        try {                

                String token = "ttn-account-v2.---";

                URL url = new URL("https://---");

                HttpsURLConnection http = (HttpsURLConnection) url.openConnection();

                http.setRequestProperty("Authorization", "Bearer " + token);
                http.setRequestMethod("GET");
                http.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
                //http.setRequestProperty("Accept", "application/json");

                System.out.println("token: " + token);

                http.setUseCaches( true );
                http.setDoInput( true );
                http.setDoOutput( true );

                http.connect();

                InputStream im = http.getInputStream();
                StringBuilder sb = new StringBuilder();
                BufferedReader br = new BufferedReader(new InputStreamReader(im));
                FileOutputStream fo = new FileOutputStream("test.txt");
                BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(fo));

                //Object obj = new JSONParser().parse(im);
                String line = br.readLine();

                while (line != null) {
                    sb.append(line + "\n");
                    System.out.println("line: " + line);
                    jsonText = sb.toString();

                    //System.out.println("json: " + jsonText);

                    bw.write(line);
                    bw.newLine();
                    line = br.readLine();

          }

        } catch (Exception e) {
            e.printStackTrace();

        }
    }

代码应该打印 JSON 数据,但我收到的是 http 响应 401。

堆栈跟踪:

java.io.IOException:服务器返回 HTTP 响应代码:URL 401:https://--- 在 sun.net.www.protocol.http.HttpURLConnection.getInputStream0(HttpURLConnection.java:1894) 在 sun.net.www .protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1492) 在 sun.net.www.protocol.https.HttpsURLConnectionImpl.getInputStream(HttpsURLConnectionImpl.java:263)

标签: javajsonrestapi

解决方案


这可能是一个很长的镜头,但更换

http.setRequestProperty("Authorization", "bearer" + token);

http.setRequestProperty("Authorization", "Bearer " + token);

并注意“承载”和令牌之间的空间。


推荐阅读