Java 带截击的Http Post请求
我正在使用截取请求服务器我有这个url,我发布了我的设备ID、制造商、android版本等,我得到了一个aeskey和aesiv base64编码和一个授权密钥,然后我将这个授权密钥发送到另一个url,作为标题和正文,我需要输入“period”(可以是=‘all’、‘递增’、‘递减’等)由aeskey和aesiv使用aes256加密,填充PKCS7和ECB或CBC。但是我从第一个请求得到了响应,但是从第二个请求我得到了http 400错误,我不知道我做错了什么。我没有访问服务器的权限,所以我只是添加了要添加的标题和参数。我在想也许我做的加密错误 这就是我解码base64 aeskey和aesiv的方式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错误,我不知道我做错了什么。我没有访问服务器的权限,所以我只是
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);
}
我有两个可能的答案
所以,如果第一个问题是我的问题,我就无能为力了?因为我无法访问服务器,如果第二个问题是,我如何验证服务器是否获得正确的数据如果它是作为字段名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);
}