Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/309.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
Java 带截击的Http Post请求_Java_Android_Http_Android Volley_Bad Request - Fatal编程技术网

Java 带截击的Http Post请求

Java 带截击的Http Post请求,java,android,http,android-volley,bad-request,Java,Android,Http,Android Volley,Bad Request,我正在使用截取请求服务器我有这个url,我发布了我的设备ID、制造商、android版本等,我得到了一个aeskey和aesiv base64编码和一个授权密钥,然后我将这个授权密钥发送到另一个url,作为标题和正文,我需要输入“period”(可以是=‘all’、‘递增’、‘递减’等)由aeskey和aesiv使用aes256加密,填充PKCS7和ECB或CBC。但是我从第一个请求得到了响应,但是从第二个请求我得到了http 400错误,我不知道我做错了什么。我没有访问服务器的权限,所以我只是

我正在使用截取请求服务器我有这个url,我发布了我的设备ID、制造商、android版本等,我得到了一个aeskey和aesiv base64编码和一个授权密钥,然后我将这个授权密钥发送到另一个url,作为标题和正文,我需要输入“period”(可以是=‘all’、‘递增’、‘递减’等)由aeskey和aesiv使用aes256加密,填充PKCS7和ECB或CBC。但是我从第一个请求得到了响应,但是从第二个请求我得到了http 400错误,我不知道我做错了什么。我没有访问服务器的权限,所以我只是添加了要添加的标题和参数。我在想也许我做的加密错误

这就是我解码base64 aeskey和aesiv的方式

 key = response.getString("aesKey");
                    iv = response.getString("aesIV");
                    byte[] aeskey = Base64.decode(key, Base64.DEFAULT);
                    byte[] aesiv = Base64.decode(iv, Base64.DEFAULT);

这是我的第一个请求代码

public void getData(String url,String deviceID) throws JSONException {
        JSONObject datas = new JSONObject();
        datas.put("deviceID", deviceID);
        datas.put("systemVersion", Build.VERSION.SDK_INT);
        datas.put("platformName","Android");
        datas.put("deviceModel",Build.MODEL);
        datas.put("manifacturer",Build.MANUFACTURER);
        RequestQueue queue = Volley.newRequestQueue(MainActivity.this);
        JsonObjectRequest req = new JsonObjectRequest(Request.Method.POST, url, datas, new Response.Listener<JSONObject>() {

            @Override
            public void onResponse(JSONObject response) {
                System.out.println(response);
                
            }
        }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                System.out.println(error.toString());
            }
        }){


            @Override
            public Map<String, String> getHeaders() throws AuthFailureError {

                Map<String,String> params = new HashMap<>();
                params.put("Content-Type", "application/json");

                return params;
            }
        };



        queue.getCache().clear();
        queue.add(req);

    }


这是我第二次请求的第二种方法


public void getanotherdata(String url, String period, final String auth) throws JSONException {
        JSONObject datas1 = new JSONObject();
        datas1.put("period", period);
        RequestQueue queue = Volley.newRequestQueue(MainActivity.this);
        JsonObjectRequest req = new JsonObjectRequest(Request.Method.POST, url, datas1, new Response.Listener<JSONObject>() {

            @Override
            public void onResponse(JSONObject response) {

                try {
                    System.out.println(response.toString());
                    System.out.println("burası çalıştı");
                } catch (Exception e) {
                    e.printStackTrace();
                    System.out.println(e.toString());
                }
            }
        }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                System.out.println(error.toString());
            }
        }){


            @Override
            public Map<String, String> getHeaders() throws AuthFailureError {

                Map<String,String> params = new HashMap<>();
                params.put("Content-Type", "application/json");
                params.put("X-VP-Authorization", auth);
                System.out.println("AUTH DEĞERİ "+ auth);

                return params;
            }
        };



        queue.getCache().clear();
        queue.add(req);
    }



public void getanotherdata(字符串url、字符串句点、最终字符串身份验证)引发JSONException{
JSONObject datas1=新的JSONObject();
数据1.put(“期间”,期间);
RequestQueue=Volley.newRequestQueue(MainActivity.this);
JsonObjectRequest req=新的JsonObjectRequest(Request.Method.POST,url,datas1,new Response.Listener()){
@凌驾
公共void onResponse(JSONObject响应){
试一试{
System.out.println(response.toString());
System.out.println(“burasııalıştı”);
}捕获(例外e){
e、 printStackTrace();
System.out.println(例如toString());
}
}
},new Response.ErrorListener(){
@凌驾
公共无效onErrorResponse(截击错误){
System.out.println(error.toString());
}
}){
@凌驾
公共映射getHeaders()引发AuthFailureError{
Map params=新的HashMap();
参数put(“内容类型”、“应用程序/json”);
参数put(“X-VP-Authorization”,auth);
System.out.println(“AUTH DEĞERİ”+AUTH);
返回参数;
}
};
queue.getCache().clear();
队列添加(req);
}

我有两个可能的答案

  • 您可能面临头本身的编码问题,要在RFC-2616中验证HTTP标准,头字段名称必须是由1个或多个字符组成的令牌=
  • 也许其中一个代理层(如nginx或类似)在请求到达服务器之前“吃掉”了请求的头。也许您应该在发出400的接收服务器上验证它是否正确接收到包含身份验证信息的头

  • 所以,如果第一个问题是我的问题,我就无能为力了?因为我无法访问服务器,如果第二个问题是,我如何验证服务器是否获得正确的数据如果它是作为字段名X-VP-Authorization的值挂接的Base64结果,它将符合美国ascii。现在,如果另一端的服务器无法读取您发送的头,这可能是他们需要解决的问题,或者,他们读取了头,但无法验证它。是否有一些api文档可供阅读,以便我们查看您的计算是否正确?不幸的是,我也没有任何文档,但我找到了解决方案,显然我必须发送加密的“周期”数据,并对其进行base64编码,因此在我这样做之后,我得到了正确的响应,您启发了我,非常感谢。
    
    public void getanotherdata(String url, String period, final String auth) throws JSONException {
            JSONObject datas1 = new JSONObject();
            datas1.put("period", period);
            RequestQueue queue = Volley.newRequestQueue(MainActivity.this);
            JsonObjectRequest req = new JsonObjectRequest(Request.Method.POST, url, datas1, new Response.Listener<JSONObject>() {
    
                @Override
                public void onResponse(JSONObject response) {
    
                    try {
                        System.out.println(response.toString());
                        System.out.println("burası çalıştı");
                    } catch (Exception e) {
                        e.printStackTrace();
                        System.out.println(e.toString());
                    }
                }
            }, new Response.ErrorListener() {
                @Override
                public void onErrorResponse(VolleyError error) {
                    System.out.println(error.toString());
                }
            }){
    
    
                @Override
                public Map<String, String> getHeaders() throws AuthFailureError {
    
                    Map<String,String> params = new HashMap<>();
                    params.put("Content-Type", "application/json");
                    params.put("X-VP-Authorization", auth);
                    System.out.println("AUTH DEĞERİ "+ auth);
    
                    return params;
                }
            };
    
    
    
            queue.getCache().clear();
            queue.add(req);
        }