Comment définir un en-tête personnalisé dans Volley Request

Comment définir des en-têtes personnalisés pour une requête Volley? Il existe actuellement un moyen de définir le contenu du corps pour une requête POST. J’ai une simple requête GET, mais j’ai besoin de passer les en-têtes personnalisés avec. Je ne vois pas comment la classe JsonRequest la prend en charge. Est-ce possible?

La réponse acceptée avec getParams () est la définition des données du corps POST, mais la question dans le titre demandait comment définir les en-têtes HTTP comme User-Agent. Comme le dit CommonsWare, vous écrasez getHeaders (). Voici un exemple de code qui définit l’agent utilisateur sur ‘Nintendo Gameboy’ et Accept-Language sur ‘fr’:

 public void requestWithSomeHttpHeaders() { RequestQueue queue = Volley.newRequestQueue(this); Ssortingng url = "http://www.somewebsite.com"; SsortingngRequest postRequest = new SsortingngRequest(Request.Method.GET, url, new Response.Listener() { @Override public void onResponse(Ssortingng response) { // response Log.d("Response", response); } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) { // TODO Auto-generated method stub Log.d("ERROR","error => "+error.toSsortingng()); } } ) { @Override public Map getHeaders() throws AuthFailureError { Map params = new HashMap(); params.put("User-Agent", "Nintendo Gameboy"); params.put("Accept-Language", "fr"); return params; } }; queue.add(postRequest); } 

Si vous avez besoin de publier des données au lieu d’append les informations dans l’URL.

 public Request post(Ssortingng url, Ssortingng username, Ssortingng password, Listener listener, ErrorListener errorListener) { JSONObject params = new JSONObject(); params.put("user", username); params.put("pass", password); Request req = new Request( Method.POST, url, params.toSsortingng(), listener, errorListener ); return req; } 

Si vous voulez modifier les en-têtes de la requête, procédez comme suit:

 // could be any class that implements Map Map mHeaders = new ArrayMap(); mHeaders.put("user", USER); mHeaders.put("pass", PASSWORD); Request req = new Request(url, postBody, listener, errorListener) { public Map getHeaders() { return mHeaders; } } 

Vous pouvez voir cette solution. Il montre comment obtenir / définir des cookies, mais les cookies ne sont que l’un des en-têtes d’une demande / réponse. Vous devez remplacer l’une des classes * Request de Volley et définir les en-têtes requirejs dans getHeaders()


Voici la source liée:

 public class SsortingngRequest extends com.android.volley.toolbox.SsortingngRequest { private final Map _params; /** * @param method * @param url * @param params * A {@link HashMap} to post with the request. Null is allowed * and indicates no parameters will be posted along with request. * @param listener * @param errorListener */ public SsortingngRequest(int method, Ssortingng url, Map params, Listener listener, ErrorListener errorListener) { super(method, url, listener, errorListener); _params = params; } @Override protected Map getParams() { return _params; } /* (non-Javadoc) * @see com.android.volley.toolbox.SsortingngRequest#parseNetworkResponse(com.android.volley.NetworkResponse) */ @Override protected Response parseNetworkResponse(NetworkResponse response) { // since we don't know which of the two underlying network vehicles // will Volley use, we have to handle and store session cookies manually MyApp.get().checkSessionCookie(response.headers); return super.parseNetworkResponse(response); } /* (non-Javadoc) * @see com.android.volley.Request#getHeaders() */ @Override public Map getHeaders() throws AuthFailureError { Map headers = super.getHeaders(); if (headers == null || headers.equals(Collections.emptyMap())) { headers = new HashMap(); } MyApp.get().addSessionCookie(headers); return headers; } 

}

Et classe MyApp:

 public class MyApp extends Application { private static final Ssortingng SET_COOKIE_KEY = "Set-Cookie"; private static final Ssortingng COOKIE_KEY = "Cookie"; private static final Ssortingng SESSION_COOKIE = "sessionid"; private static MyApp _instance; private RequestQueue _requestQueue; private SharedPreferences _preferences; public static MyApp get() { return _instance; } @Override public void onCreate() { super.onCreate(); _instance = this; _preferences = PreferenceManager.getDefaultSharedPreferences(this); _requestQueue = Volley.newRequestQueue(this); } public RequestQueue getRequestQueue() { return _requestQueue; } /** * Checks the response headers for session cookie and saves it * if it finds it. * @param headers Response Headers. */ public final void checkSessionCookie(Map headers) { if (headers.containsKey(SET_COOKIE_KEY) && headers.get(SET_COOKIE_KEY).startsWith(SESSION_COOKIE)) { Ssortingng cookie = headers.get(SET_COOKIE_KEY); if (cookie.length() > 0) { Ssortingng[] splitCookie = cookie.split(";"); Ssortingng[] splitSessionId = splitCookie[0].split("="); cookie = splitSessionId[1]; Editor prefEditor = _preferences.edit(); prefEditor.putSsortingng(SESSION_COOKIE, cookie); prefEditor.commit(); } } } /** * Adds session cookie to headers if exists. * @param headers */ public final void addSessionCookie(Map headers) { Ssortingng sessionId = _preferences.getSsortingng(SESSION_COOKIE, ""); if (sessionId.length() > 0) { SsortingngBuilder builder = new SsortingngBuilder(); builder.append(SESSION_COOKIE); builder.append("="); builder.append(sessionId); if (headers.containsKey(COOKIE_KEY)) { builder.append("; "); builder.append(headers.get(COOKIE_KEY)); } headers.put(COOKIE_KEY, builder.toSsortingng()); } } }