使用Volley的库从HTTP响应中解析标头(Android)

时间:2018-02-18 19:48:30

标签: android http header android-volley

我希望使用Volley的库来包含Android响应中的标题。我知道还有其他工具,如OkHttp,Retrofit,Moshi,Picasso,这些工具有更多的文档(我认为Volley的一个缺点 - 很少有文档)。然而,我已经花了很多时间。

我只是想将一个curl --include -X POST -d ...请求翻译成android。

到目前为止,我有POST工作,但没有--include(https://www.itsalif.info/content/android-volley-tutorial-http-get-post-put的有用教程):

public class HTTPService {

public static void makeRequest(Context context) {
    RequestQueue queue = Volley.newRequestQueue(context);

    Response.Listener responseListener = new Response.Listener<String>() {
        @Override
        public void onResponse(String response) {
            if (response!=null){
                Log.d("Response", response);
                Log.d("Response", Integer.toString(response.length()));
            }
        }
    };

    Response.ErrorListener errorListener = new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {
            // error
            String response = "Error";
            Log.d("Error.Response", error.toString());
        }
    };

    String url = "http://httpbin.org/post";


    StringRequest postRequest = new StringRequest(Request.Method.POST, url, responseListener, errorListener) {
        @Override
        protected Map<String, String> getParams() {
            Map<String, String> params = new HashMap<String, String>();
            params.put("name", "John");
            params.put("domain", "https://www.facebook.com");
            return params;
        }

        @Override
        public Map<String, String> getHeaders() throws AuthFailureError {
            return super.getHeaders();
        }
        };
    queue.add(postRequest);
}
}

我已经展示了getHeaders函数来说明这不是我想要的。这是为您的数据添加标题。我想在响应对象中包含HTTP标头。

我发现的两个链接应该描述如何执行此操作:

1)https://developer.android.com/training/volley/request-custom.html

2)https://android.googlesource.com/platform/frameworks/volley/+/android-4.3_r0.9/src/com/android/volley/toolbox/JsonObjectRequest.java

但是我在这一点上感到非常困惑,并且......有人能提供有效的解决方案吗?或者告诉我他们如何处理curl -i / - include命令?

1 个答案:

答案 0 :(得分:0)

在谷歌上搜索,我只看到来自Volley的Response parseNetworkResponse(NetworkResponse response)功能的访问头信息(如--include)的方法。以下内容来自用户thedude在OWL 2 QL的答案。

public final class TokenHandler {
private TokenHandler() {}

private static String token = "";

public static void setToken(String newToken) {
    if (newToken != null)
        token = newToken;
}

public static String getToken() {
    return token;
}
}

因为这是一个静态上下文,我发现存储信息的唯一方法是作为另一个类的公共变量。来自thedude的答案使用了TokenHandler.java类:

TBB