Android Volley如何在请求头中添加身份验证信息并在请求体中发送JSON对象

4

我需要通过volley发送一些包含身份验证头和Json对象的http请求,但是我在volley中没有找到可以实现这个功能的请求。

我发现了GsonRequest和JsonObjectRequest。

GsonRequest (int method, String url, Class clazz, Map headers, Listener listener, ErrorListener errorListener, Gson useGson)

JsonObjectRequest (int method, java.lang.String url, JSONObject jsonRequest, Response.Listener listener, Response.ErrorListener errorListener)

有什么想法吗?

3个回答

8
在您的Request类中,覆盖getHeaders()方法以发送自定义标头。
为了在请求体中发送参数,您需要覆盖请求类的getParams()getBody()方法,详见此处: 使用Volley在Android中进行异步HTTP请求

2
我已经尝试过,但是它不起作用,因为JsonObjectRequest直接获取了正文内容。 - Dharmendra Pratap Singh

1
尝试这段代码。
@Override
public Map<String, String> getHeaders() throws AuthFailureError {
    HashMap<String, String> params = new HashMap<String, String>();
    String creds = String.format("%s:%s","USERNAME","PASSWORD");
    String auth = "Basic " + Base64.encodeToString(creds.getBytes(), Base64.DEFAULT);
    params.put("Authorization", auth);
    return params;
}

1

getHeaders() 和 getParams() 方法都可以同时用于将数据分别作为头部和主体发送。

JsonObjectRequest jsonObjectRequest = new 
                    JsonObjectRequest(Request.Method.GET,
                    url,
                    null,
                    new Response.Listener<JSONObject>() {
                        @Override
                        public void onResponse(JSONObject response) {
                            Log.d(TAG, response.toString());
                        }
                    },
                    new Response.ErrorListener() {
                        @Override
                        public void onErrorResponse(VolleyError error) {
                            Log.d(TAG, error.toString());
                        }
                    }) {
                @Override
                public Map<String, String> getHeaders() throws AuthFailureError {
                    HashMap<String, String> headers = new HashMap<>();

                    headers.put(headerKey, headerValue);
                    return headers;
                }

                @Override
                protected Map<String, String> getParams() throws AuthFailureError {
                    Map<String, String> params = new HashMap<>();
                    params.put(bodyKey, bodyValue);
                    return params;
                }
            };
            VolleySingleton.getInstance(getActivity()).addToRequestQueue(jsonObjectRequest);

这对我有效!!


getParams仅针对POST请求调用。GET请求没有主体,因此永远不会调用getParams。 - Yohanim

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接