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

401类型为Authorization=承载令牌的GET请求出现未经授权的错误

  •  1
  • Sreedev  · 技术社区  · 8 年前

    我正在发出一个HttpGet请求,其中“Authorization”作为附加承载令牌的标头。我一直收到401未经授权的错误。

    我尝试过改装,但没有成功,所以我又回到了基本的HTTP客户端。然后经过大量研究发现DefaultHttp有一些错误。所以我改为HTTPUrlConnection。即使做了所有这些,我仍然会收到一个未经授权的401错误。我在这里可能会做错什么?因为这个错误仍然存在,我决定坚持使用HTTPUrlConnection或DefaultHTTP,远离库。

    这是我的HttpUrlConnection代码

            URL obj = new URL(url);
            HttpURLConnection con = (HttpURLConnection)
                                obj.openConnection();
            con.setRequestMethod("GET");
    
            String authString = "Bearer" + accessToken;
            con.setRequestProperty("Authorization", authString);
    
            int responseCode = con.getResponseCode();
    
            if (responseCode == HttpURLConnection.HTTP_OK) { // success
                BufferedReader in = new BufferedReader(new InputStreamReader(
                        con.getInputStream()));
                String inputLine;
                response = new StringBuffer();
    
                while ((inputLine = in.readLine()) != null) {
                    response.append(inputLine);
                }
                in.close();
    
            } else {
                System.out.println("GET request not worked");
            }
    

    这是我的DefaultHttp请求

            StringBuilder builder = new StringBuilder();
            HttpClient client = new DefaultHttpClient();
            HttpGet httpGetRequest = new HttpGet(url);
            httpGetRequest.addHeader("Authorization","Bearer"+accessToken);
            try {
                HttpResponse response = client.execute(httpGetRequest);
                StatusLine statusLine = response.getStatusLine();
                int statusCode = statusLine.getStatusCode();
                if (statusCode == 200) {
                    HttpEntity entity = response.getEntity();
                    InputStream content = entity.getContent();
                    BufferedReader reader = new BufferedReader(new 
                    InputStreamReader(content));
                    String line;
                    while ((line = reader.readLine()) != null) {
                        builder.append(line);
                    }
                }
    
    3 回复  |  直到 8 年前
        1
  •  2
  •   mad.meesh    8 年前

    在后面添加空格 Bearer cus按原样连接 持票人 将标记作为一个字符串

        2
  •  0
  •   Muhammad Saad Rafique    8 年前

    请使用快速Android网络库,它非常容易使用,您可以在不到5分钟的时间内实现您的逻辑。所以请至少试一试。以下是指向库的链接:

    https://github.com/amitshekhariitbhu/Fast-Android-Networking

        3
  •  0
  •   Sreedev    8 年前

    问题已解决。我尝试使用Reformation和defaultHttpClient,但由于一些cookie问题,这两种方法对我都不起作用。但使用OKHttpClient很简单,我可以点击服务器并得到响应。

        OkHttpClient client = new OkHttpClient();
        Request request = new Request.Builder()
                .url(mURL)
                .addHeader("Authorization", String.format("Bearer %s", bearerToken))
                .build();
    
            Response response = client.newCall(request).execute();
            return response.body().string();
    
    推荐文章