【问题标题】:Volley JsonObjectRequest with Basic Auth headers didn't work带有基本身份验证标头的 Volley JsonObjectRequest 不起作用
【发布时间】:2017-06-09 03:52:13
【问题描述】:

我正在尝试使用 JsonObjectRequest 发送用户名和密码作为基本授权。我试图覆盖getHeaders() 方法,但它没有用。这是我的代码:

public class NewPostRequest extends JsonObjectRequest {

    public NewPostRequest(JSONObject requestBody) {
        super(Method.POST, APIConstants.CREATE_POST_URL, requestBody, new Response.Listener<JSONObject>() {
            @Override
            public void onResponse(JSONObject response) {

                try {

                    long postId = response.getLong("id");

                    NewPostResponse newPostResponse = new NewPostResponse(postId);

                    EventBus.getDefault().post(newPostResponse);

                } catch (JSONException e) {

                    e.printStackTrace();

                    EventBus.getDefault().post(new NewPostResponse(-1));

                }

            }
        }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {

                EventBus.getDefault().post(new NewPostResponse(-1));

            }
        });
    }

    @Override
    public Map<String, String> getHeaders() throws AuthFailureError {

        Map<String, String> headers = new HashMap<>();

        String credentials = "****:***********************";

        String auth = "Basic "
                + Base64.encodeToString(credentials.getBytes(), Base64.NO_WRAP);

        headers.put("Content-Type", "application/json; charset=utf-8");

        headers.put("Authorization", auth);

        return headers;
    }

    @Override
    protected Response<JSONObject> parseNetworkResponse(NetworkResponse response) {

        JSONObject jsonObject = null;

        try {

            String data = new String(response.data,
                    HttpHeaderParser.parseCharset(response.headers));

            jsonObject = new JSONObject(data);

        } catch (UnsupportedEncodingException | JSONException e) {

            e.printStackTrace();

        }

        return Response.success(jsonObject, HttpHeaderParser.parseCacheHeaders(response));
    }
}

我使用Base64.NO_WRAP时出错:

com.android.volley.AuthFailureError

当我使用Base64.DEFAULT:

java.lang.IllegalArgumentException: Unexpected char 0x0a at 46 in header value: Basic *************************

注意:此网络服务正在使用 Google Postman 工具。

【问题讨论】:

  • 你检查服务器日志了吗?
  • 问题解决了。
  • @IbrahimDisouki 你是怎么解决的?

标签: android web-services android-volley basic-authentication jsonobjectrequest


【解决方案1】:

检查我的答案对我来说效果很好。

Check this one

【讨论】:

  • 我在你的回答中看不到任何关于授权的内容。
猜你喜欢
  • 2018-01-13
  • 2023-03-27
  • 2021-06-21
  • 1970-01-01
  • 2015-03-13
  • 1970-01-01
  • 2014-09-06
  • 2014-01-22
  • 2016-01-11
相关资源
最近更新 更多