重写 getHeaders() 可以在必要时向请求添加海关 header 。 但是如果总是需要设置 X header 怎么办?例如静态身份验证 token 。
JsonObjectRequest req = new JsonObjectRequest(URL, new JSONObject(params),
new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
setFollowButton(item);
}
}, null){
@Override
public Map<String, String> getHeaders() throws AuthFailureError {
HashMap<String, String> headers = new HashMap<String, String>();
headers.put("Authorization", "Token XXXXXXXXXXXX");
return headers;
}
};
Application.getInstance().addToRequestQueue(req);
是否可以将 header 添加到发送到 addToRequestQueue 方法的请求中,而不是在我每次编写请求时都覆盖它?
最佳答案
我相信最好的方法是扩展您选择使用的 HttpStack
子类,然后拦截 performRequest()
方法,将您的全局 header 放入其中。
public class MyHurlStack extends HurlStack {
@Override
public HttpResponse performRequest(
Request<?> request, Map<String, String> additionalHeaders)
throws IOException, AuthFailureError {
Map<String, String> headers = request.getHeaders();
// put your global headers
headers.put("Via", "netroid");
headers.put("Accept-Charset", "UTF-8");
headers.put("Origin", "http://netroid.cn/");
return super.performRequest(request, additionalHeaders);
}
}
public class MyHttpClientStack extends HttpClientStack {
public MyHttpClientStack(HttpClient client) {
super(client);
}
@Override
protected void onPrepareRequest(HttpUriRequest request) throws IOException {
// put your global headers
request.setHeader("Via", "netroid");
request.setHeader("Accept-Charset", "UTF-8");
request.setHeader("Origin", "http://netroid.cn/");
super.onPrepareRequest(request);
}
}
当RequestQueue
初始化时,使用自定义的HttpStack代替。
if (stack == null) {
if (Build.VERSION.SDK_INT >= 9) {
stack = new HurlStack();
} else {
stack = new MyHttpClientStack(AndroidHttpClient.newInstance(userAgent));
}
}
Network network = new BasicNetwork(stack);
关于java - 为所有 volley 请求设置自定义 header ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24877292/