Java OkHttp3在Linux和Windows上的不同行为

Java OkHttp3在Linux和Windows上的不同行为,java,okhttp,Java,Okhttp,我有一些在windows平台上正常工作的代码,但是,这些代码在Linux上给出了不同的行为 我使用以下代码向HTTP服务器提交请求以获取一些消息。我所做的如下 在本地windows计算机上部署代码,然后触发请求并获取服务器响应 参数: {“articleid”:“endtime”:“2019-10-29T18:00:00”,“starttime”:“2019-10-29T16:00:00”,“areaid”:“title”:“pageIndex”:“1”} 服务器响应: {“结果”:1,“错误代

我有一些在windows平台上正常工作的代码,但是,这些代码在Linux上给出了不同的行为

我使用以下代码向HTTP服务器提交请求以获取一些消息。我所做的如下

  • 在本地windows计算机上部署代码,然后触发请求并获取服务器响应 参数:

    {“articleid”:“endtime”:“2019-10-29T18:00:00”,“starttime”:“2019-10-29T16:00:00”,“areaid”:“title”:“pageIndex”:“1”}

    服务器响应:

    {“结果”:1,“错误代码”:“消息”:“页面索引”:1,“下一页”:2,“页面大小”:100,“数据”:[。。。 这里有一些数据…]}

  • 在Linux服务器上部署代码,使用步骤1中相同的参数触发请求,但是服务器响应不同
  • 参数:

    {“articleid”:“endtime”:“2019-10-29T18:00:00”,“starttime”:“2019-10-29T16:00:00”,“areaid”:“title”:“pageIndex”:“1”}

    服务器响应:

    {“结果”:1,“错误代码”:“消息”:“页面索引”:1,“下一页”:null,“页面大小”:0,“数据”:[]}

    我们查看了代码,但找不到导致不同行为的原因

    我想在不同的jar中可能存在一个或多个同名的java类文件,windows/Linux加载不同的类文件会导致问题,但是在查看jar文件后,我也不知道。与okhttp相关的jar文件如下:

    okhttp-3.10.0.jar
    okio-1.14.0.jar
    netty-codec-http-4.1.31.Final.jar
    httpcore-nio-4.4.10.jar
    httpcore-4.4.10.jar
    httpclient-4.5.6.jar
    httpasyncclient-4.1.4.jar

    
     public static String okHttpPost(String requestUrl,Map<String,String> map,String orgId,String taskID) throws IOException {
    
            String exceptionMessage="";
            String responseResult="";
    
            try {
                FormBody.Builder newFormBody = new FormBody.Builder();
                Set<String> keys = map.keySet();
                for(String key:keys){
                    newFormBody.add(key,map.get(key));
                }
                RequestBody body = newFormBody.build();
                log.info("server url : "+requestUrl+";paramters:"+new ObjectMapper().writeValueAsString(map));
                Request request = new Request.Builder()
                        .url(requestUrl)
                        .post(body)
                        .build();
    
                Call call = okHttpClient.newCall(request);
                Response response = call.execute();
    
                if (response.code() != 200) {
                    exceptionMessage = "request failed, taskID:" + taskID + "orgid:" + orgId + "response mesage:"+response.toString();
    
                    log.info(exceptionMessage);
                }
    
                responseResult = response.body().string();
                log.info("server url : " + requestUrl + ", reponse messages:"+responseResult);
                return responseResult;
            } catch (IOException e) {
                e.printStackTrace();
            }finally {
                if (!responseResult.contains("token")) {
                        do some thing;
                }
            }
            return null;
        }
    
    
    
    公共静态字符串okHttpPost(字符串requestUrl、映射映射、字符串orgId、字符串taskID)引发IOException{
    字符串exceptionMessage=“”;
    字符串responseResult=“”;
    试一试{
    FormBody.Builder newFormBody=新FormBody.Builder();
    Set keys=map.keySet();
    用于(字符串键:键){
    newFormBody.add(key,map.get(key));
    }
    RequestBody=newFormBody.build();
    log.info(“服务器url:+requestUrl+”;参数:+new ObjectMapper().writeValueAsString(map));
    Request Request=newrequest.Builder()
    .url(请求url)
    .职位(机构)
    .build();
    Call Call=okHttpClient.newCall(请求);
    Response=call.execute();
    如果(response.code()!=200){
    exceptionMessage=“请求失败,taskID:+taskID+”orgid:+orgid+”响应表:“+response.toString()”;
    log.info(例外消息);
    }
    responseResult=response.body().string();
    log.info(“服务器url:+requestUrl+”,响应消息:+responseResult);
    返回响应结果;
    }捕获(IOE异常){
    e、 printStackTrace();
    }最后{
    如果(!responseResult.包含(“令牌”)){
    做一些事情;
    }
    }
    返回null;
    }
    
    你能解释一下为什么相同的代码行为在windows和Linux平台上不同吗?

    如何更改代码以使其在Linux上正常工作

    使用OkHttp的日志拦截器?这可以显示每个请求之间的全部差异。感谢Wilson,OkHttps的loggin拦截器非常有用。问题解决了,该行为是由服务器端的某些特殊代码逻辑引起的,与平台差异无关。