【问题标题】:Volley - POST request with headersVolley - 带有标头的 POST 请求
【发布时间】:2017-08-31 03:21:03
【问题描述】:

我尝试使用带有标题的 volley rquest。我的代码如下:

        final String contentType = "text/xml;charset=UTF-8";


        Request stringRequest = new StringRequest(Request.Method.POST, URL, new Response.Listener<String>() {
                @Override
                public void onResponse(String response) {
                    Log.i("@@response ", response);
                }
            }, new Response.ErrorListener() {
                @Override
                public void onErrorResponse(VolleyError error) {
                    Log.e("@@Error ", error);
                }
            }) {

            @Override
            public String getBodyContentType()
            {
                return contentType;
            }

            @Override
            public Map<String, String> getHeaders() throws AuthFailureError {
                Map<String, String> headers = new HashMap<>();

                    headers.put("Accept-Encoding", "gzip,deflate");
                    headers.put("Connection", "Keep-Alive");
                    headers.put("User-Agent", "Apache-HttpClient/4.1.1 (java 1.5)");
                return headers;
            }

            @Override
            public byte[] getBody() throws AuthFailureError {
                try {
                    return requestBody.getBytes(getParamsEncoding());
                } catch (Exception e) {
                    Log.i("@@ERROR ", " " + e);
                    return null;
                }
            }
        };

我的回复看起来像

��������������I�%&amp;/m�{J�J��t��$ؐ@�H���iG#)�*��eVe]f@�흼��{���{�� ;�N'����?\fdl��J�ɞ!���?~|?"��ez��MQ-?�hw��Q�/�լX^|�Ѻ=�>�� �8z�T����2/�U��+��>��y�����L��"k��>W��]�r7ח�~���k

编码-解码有一些问题。我怎么解决这个问题?如果我注释掉headers.put("Accept-Encoding", "gzip,deflate"),我就能得到准确的回复。

【问题讨论】:

  • @Krish 谢谢。有用。我是否应该检查 Accept-Encoding gzip,deflate 与否。我想使用这些实现发送许多类型的请求。这将是一个通用请求。
  • 按照你的服务器实现就好了。

标签: android http-headers xmlhttprequest android-volley


【解决方案1】:

我找到了这个答案,

import com.android.volley.NetworkResponse;
import com.android.volley.ParseError;
import com.android.volley.Response;
import com.android.volley.toolbox.HttpHeaderParser;
import com.android.volley.toolbox.StringRequest;

import java.io.BufferedReader;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.zip.GZIPInputStream;

public class GZipRequest extends StringRequest {

    public GZipRequest(int method, String url, Response.Listener<String> listener, Response.ErrorListener errorListener) {
        super(method, url, listener, errorListener);
    }

    public GZipRequest(String url, Response.Listener<String> listener, Response.ErrorListener errorListener) {
        super(url, listener, errorListener);
    }

    // parse the gzip response using a GZIPInputStream
    @Override
    protected Response<String> parseNetworkResponse(NetworkResponse response) {
        String output = ""; // note: better to use StringBuilder
        try {
            final GZIPInputStream gStream = new GZIPInputStream(new ByteArrayInputStream(response.data));
            final InputStreamReader reader = new InputStreamReader(gStream);
            final BufferedReader in = new BufferedReader(reader);
            String read;
            while ((read = in.readLine()) != null) {
                output += read;
            }
            reader.close();
            in.close();
            gStream.close();
        } catch (IOException e) {
            return Response.error(new ParseError());
        }
        return Response.success(output, HttpHeaderParser.parseCacheHeaders(response));
    }
}

从此链接https://gist.github.com/premnirmal/8526542

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-01-28
    • 2019-12-13
    • 2020-01-02
    • 2021-08-11
    • 2018-02-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多