Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/194.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 截击-带有标题的POST请求_Android_Http Headers_Xmlhttprequest_Android Volley - Fatal编程技术网

Android 截击-带有标题的POST请求

Android 截击-带有标题的POST请求,android,http-headers,xmlhttprequest,android-volley,Android,Http Headers,Xmlhttprequest,Android Volley,我试着用头球截击。我的代码如下: final String contentType = "text/xml;charset=UTF-8"; Request stringRequest = new StringRequest(Request.Method.POST, URL, new Response.Listener<String>() { @Override public void

我试着用头球截击。我的代码如下:

        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;
                }
            }
        };
final String contentType=“text/xml;charset=UTF-8”;
Request stringRequest=new stringRequest(Request.Method.POST,URL,new Response.Listener()){
@凌驾
公共void onResponse(字符串响应){
Log.i(“@@response”,response);
}
},new Response.ErrorListener(){
@凌驾
公共无效onErrorResponse(截击错误){
Log.e(“@@Error”,Error);
}
}) {
@凌驾
公共字符串getBodyContentType()
{
返回contentType;
}
@凌驾
公共映射getHeaders()引发AuthFailureError{
Map headers=newhashmap();
headers.put(“接受编码”、“gzip、deflate”);
标题。放置(“连接”、“保持活动”);
put(“用户代理”、“ApacheHttpClient/4.1.1(Java1.5)”);
返回标题;
}
@凌驾
公共字节[]getBody()抛出AuthFailureError{
试一试{
返回requestBody.getBytes(getParamSenCodeding());
}捕获(例外e){
Log.i(“@@ERROR”和“+e”);
返回null;
}
}
};
我的回答是

��������������<代码>I�%&/M�{J�J��T��$ؐ@�H���iG#)�*��eVe]f@�흼��{���{��;�不���?\fdl��J�ɞ!���?~|?"��简单��MQ-?�硬件��Q�/�լX^|�Ѻ=�>���8z�T�����2/�U��+��>��yۮݽ�L��"K��>W��]�r7ח�~���k

编码解码有一些问题。我如何解决这个问题?如果我注释掉
头.put(“接受编码”,“gzip,deflate”)
,我可以得到准确的响应。

我找到了这个答案

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));
    }
}
import com.android.volley.NetworkResponse;
导入com.android.volley.ParseError;
导入com.android.volley.Response;
导入com.android.volley.toolbox.HttpHeaderParser;
导入com.android.volley.toolbox.StringRequest;
导入java.io.BufferedReader;
导入java.io.ByteArrayInputStream;
导入java.io.IOException;
导入java.io.InputStreamReader;
导入java.util.zip.gzip输入流;
公共类GZipRequest扩展了StringRequest{
公共GZipRequest(int方法、字符串url、Response.Listener、Response.ErrorListener ErrorListener){
super(方法、url、侦听器、errorListener);
}
公共GZipRequest(字符串url,Response.Listener,Response.ErrorListener ErrorListener){
超级(url、侦听器、errorListener);
}
//使用GZIPInputStream解析gzip响应
@凌驾
受保护的响应parseNetworkResponse(NetworkResponse响应){
字符串输出=”;//注意:最好使用StringBuilder
试一试{
final GZIPInputStream gStream=newgzipinputstream(newbytearrayinputstream(response.data));
最终InputStreamReader阅读器=新的InputStreamReader(gStream);
最终BufferedReader in=新的BufferedReader(读卡器);
字符串读取;
而((read=in.readLine())!=null){
输出+=读取;
}
reader.close();
in.close();
gStream.close();
}捕获(IOE异常){
返回Response.error(newparseerror());
}
返回Response.success(输出,HttpHeaderParser.parseCacheHeaders(响应));
}
}

通过此链接

引用@Krish谢谢。它可以工作。我是否应该选中Accept Encoding gzip,deflate或not。我想使用这些实现发送多种类型的请求。这将是一个通用请求。这将根据您的服务器实现而定。