设置自定义页眉所有凌空请求 [英] Set custom headers to all volley requests
问题描述
重载getHeaders()工作,如果需要添加页眉海关向请求。
但如果总是需要什么x报头被设置?例如一个静态的身份验证令牌。
Overriding getHeaders() works to add customs headers if necessary to the requests. But what if X header is always needed to be set? for example an static auth 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);
可以是头添加到发送到addToRequestQueue方法,而不是要求每一个我写请求时覆盖它?
Can be the header added to the request sent to the addToRequestQueue method instead overwriting it every time I write a request?
推荐答案
我认为最好的办法就是延长 HttpStack
的子类,您选择使用,然后拦截在 performRequest()
方法,把你的全局头部里面。
I believe the best way is extend the HttpStack
sub-class which you choose to use, then intercepting the performRequest()
method, put your global headers inside it.
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);
}
}
在请求队列
初始化,使用自定义HttpStack代替。
when RequestQueue
initializing, use the customize HttpStack instead of.
if (stack == null) {
if (Build.VERSION.SDK_INT >= 9) {
stack = new HurlStack();
} else {
stack = new MyHttpClientStack(AndroidHttpClient.newInstance(userAgent));
}
}
Network network = new BasicNetwork(stack);
这篇关于设置自定义页眉所有凌空请求的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!