Android Volley - 获取响应标题并读取 html

标签 android android-volley

我找不到任何解决方案。截至目前,我似乎必须在获取正常的 html 响应或仅获取响应 header 之间做出选择。

有没有办法修改我的代码来获得这两个?

当前代码(仅提供响应 header )

StringRequest stringRequest = new StringRequest(Request.Method.GET, loginURL,
                new Response.Listener<String>() {
                    @Override
                    public void onResponse(String response) {


                            String responseSession = response.substring(0,response.indexOf(";"));



                    }
                },
                new Response.ErrorListener() {
                    @Override
                    public void onErrorResponse(VolleyError error) {
                        Toast.makeText(LoginActivity.this,error.toString(),Toast.LENGTH_LONG ).show();
                    }
                }){

            @Override
            protected Response<String> parseNetworkResponse(NetworkResponse networkResponse) {
                String sessionId = networkResponse.headers.get("Set-Cookie");
                com.android.volley.Response<String> result = com.android.volley.Response.success(sessionId,
                        HttpHeaderParser.parseCacheHeaders(networkResponse));
                return result;
            }

        };

        RequestQueue requestQueue = Volley.newRequestQueue(this);
        requestQueue.add(stringRequest);

最佳答案

为此目的使用自定义请求类,

public class CustomStringRequest extends Request<CustomStringRequest.ResponseM> {


    private Response.Listener<CustomStringRequest.ResponseM> mListener;

    public CustomStringRequest(int method, String url, Response.Listener<CustomStringRequest.ResponseM> responseListener, Response.ErrorListener listener) {
        super(method, url, listener);
        this.mListener = responseListener;
    }


    @Override
    protected void deliverResponse(ResponseM response) {
        this.mListener.onResponse(response);
    }

    @Override
    protected Response<ResponseM> parseNetworkResponse(NetworkResponse response) {
        String parsed;
        try {
            parsed = new String(response.data, HttpHeaderParser.parseCharset(response.headers));
        } catch (UnsupportedEncodingException e) {
            parsed = new String(response.data);
        }

        ResponseM responseM = new ResponseM();
        responseM.headers = response.headers;
        responseM.response = parsed;

        return Response.success(responseM, HttpHeaderParser.parseCacheHeaders(response));
    }


    public static class ResponseM {
        Map<String, String> headers;
        String response;
    }

}

然后像这样更改代码,

CustomStringRequest stringRequest = new CustomStringRequest(Request.Method.GET, loginURL,
                new Response.Listener<CustomStringRequest.ResponseM>() {
                    @Override
                    public void onResponse(CustomStringRequest.ResponseM result) {

                        //From here you will get headers
                        String sessionId = result.headers.get("Set-Cookie");
                        String responseString = result.response;

                    }


                },
                new Response.ErrorListener() {
                    @Override
                    public void onErrorResponse(VolleyError error) {
                        Toast.makeText(LoginActivity.this,error.toString(),Toast.LENGTH_LONG ).show();
                    }
                }) {


        };

关于Android Volley - 获取响应标题并读取 html,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41722662/

相关文章:

java - 在 RecyclerView 中添加日期部分

Android Volley 请求在模拟器中有效,但在设备中无效

android - 更改youtube api android的进度栏

android - 使用 Mono Touch 时,我还可以为标准 Window 应用程序打包吗?

android - 从 ViewModel 使用 Volley Singleton

安卓工作室 : NoClassDefFoundError on all classes of the app module

尝试使用 Volley 更新数据库时出现 Php 错误

java - 使用 GSON 发送 Volley 参数

android - Gradle 0.9.+/0.9.2 错误 : Unable to load class 'com.android.builder.testing.api.DeviceProvider'

android - bool java.util.List.add(java.lang.Object)