Java 8 Http Post请求在Java 7和;Java8,用于相同的代码片段

Java 8 Http Post请求在Java 7和;Java8,用于相同的代码片段,java-8,java-7,Java 8,Java 7,下面是使用java7编译和执行的一段代码,它给出的结果与使用java8得到的结果不同 在使用apachehttpclient进行本机测试之前。我想其他图书馆的问题也一样 输出Jdk7 {“错误”:“授权无效”,“错误描述”:“身份验证失败”} java.io.IOException:服务器返回URL:XXX的HTTP响应代码:400 位于``sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.j

下面是使用
java7
编译和执行的一段代码,它给出的结果与使用
java8
得到的结果不同

在使用apache
httpclient
进行本机测试之前。我想其他图书馆的问题也一样

输出Jdk7

{“错误”:“授权无效”,“错误描述”:“身份验证失败”}
java.io.IOException:服务器返回URL:XXX的HTTP响应代码:400
位于``sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1627)

输出Jdk8:预期结果

public String requestSFAuthToken(Map<String, String> sfAttributes) throws Exception{
    StringBuilder result = new StringBuilder();        
    String request = sfAttributes.get("url");
    URL url = new URL(request);
    HttpURLConnection conn = (HttpURLConnection) url.openConnection();
    OutputStreamWriter writer  = null;
    BufferedReader reader = null;
    try{

    conn.setRequestMethod("POST");
    conn.setRequestProperty( "Content-Type", "application/x-www-form-urlencoded");
    conn.setRequestProperty( "Accept", "application/json"); 
    conn.setDoOutput(true);
    conn.setAllowUserInteraction(true);
    conn.connect();
    writer = new OutputStreamWriter(conn.getOutputStream());
    writer.write(getParameters(sfAttributes));
    writer.flush();
    String line;
    reader = new BufferedReader(new InputStreamReader(conn.getInputStream()));
    while ((line = reader.readLine()) != null) {
        System.out.println(line);
        result.append(line);
    }
    writer.close();
    reader.close(); 
    conn.disconnect();
    }catch(Exception e){
        if(conn != null){
            String error ; 
            reader = new BufferedReader(new InputStreamReader(conn.getErrorStream()));
            while ((error = reader.readLine()) != null) {
                System.out.println(error);
            }
        }
        throw e;
    }finally{
        if(conn != null){
            conn.disconnect();
        }
        if(writer != null){
            writer.close();
        }
        if(reader != null){
            reader.close(); 
        }
    }

    return result.toString();
}

private String getParameters(Map<String, String> sfAttributes) throws UnsupportedEncodingException {
    String params = URLEncoder.encode("grant_type", "UTF8")
            + "="+ URLEncoder.encode(sfAttributes.get("grant_type"), "UTF8");
    params += "&"+ URLEncoder.encode("client_id","UTF8")
            + "="+ URLEncoder.encode(sfAttributes.get("client_id"), "UTF8");
    params += "&"+ URLEncoder.encode("client_secret", "UTF8")
            + "="+ URLEncoder.encode(sfAttributes.get("client_secret"), "UTF8");
    params += "&"+ URLEncoder.encode("username", "UTF8")
            + "="+ URLEncoder.encode(sfAttributes.get("username"), "UTF8");
    params += "&"+ URLEncoder.encode("password", "UTF8")
            + "="+ URLEncoder.encode(sfAttributes.get("password"), "UTF8");
    return params;
}
public String requestSFAuthToken(映射sfAttributes)引发异常{
StringBuilder结果=新建StringBuilder();
字符串请求=sfAttributes.get(“url”);
URL=新URL(请求);
HttpURLConnection conn=(HttpURLConnection)url.openConnection();
OutputStreamWriter writer=null;
BufferedReader reader=null;
试一试{
conn.setRequestMethod(“POST”);
conn.setRequestProperty(“内容类型”、“应用程序/x-www-form-urlencoded”);
conn.setRequestProperty(“接受”、“应用程序/json”);
连接设置输出(真);
conn.setAllowUserInteraction(真);
连接();
writer=newoutputstreamwriter(conn.getOutputStream());
write(getParameters(sfAttributes));
writer.flush();
弦线;
reader=新的BufferedReader(新的InputStreamReader(conn.getInputStream());
而((line=reader.readLine())!=null){
系统输出打印项次(行);
结果。追加(行);
}
writer.close();
reader.close();
连接断开();
}捕获(例外e){
如果(conn!=null){
字符串错误;
reader=新的BufferedReader(新的InputStreamReader(conn.getErrorStream());
而((error=reader.readLine())!=null){
系统输出打印项次(错误);
}
}
投掷e;
}最后{
如果(conn!=null){
连接断开();
}
if(writer!=null){
writer.close();
}
if(读卡器!=null){
reader.close();
}
}
返回result.toString();
}
私有字符串getParameters(映射sfAttributes)引发UnsupportedEncodingException{
String params=URLEncoder.encode(“授权类型”,“UTF8”)
+“=”+URLEncoder.encode(sfAttributes.get(“grant_type”),“UTF8”);
params+=“&”+URLEncoder.encode(“客户端id”、“UTF8”)
+“=”+URLEncoder.encode(sfAttributes.get(“客户端id”),“UTF8”);
params+=“&”+URLEncoder.encode(“客户端密码”,“UTF8”)
+“=”+URLEncoder.encode(sfAttributes.get(“客户机密码”),“UTF8”);
params+=“&”+URLEncoder.encode(“用户名”,“UTF8”)
+“=”+URLEncoder.encode(sfAttributes.get(“用户名”),“UTF8”);
params+=“&”+URLEncoder.encode(“密码”,“UTF8”)
+“=”+URLEncoder.encode(sfAttributes.get(“密码”),“UTF8”);
返回参数;
}

结果是什么。。。添加了输出结果。通过jdk8,我收到了预期的响应。您能使用数据包嗅探器检查请求中的所有差异吗,包括任何cookie、其他标头差异、,请求的字符编码?@Dave我还没有,但我只是尝试使用JAVA_HOME\jre\lib\logging.properties中的
-Djava.util.logging.config.file=logging.properties
选项和
sun.net.www.protocol.http.HttpURLConnection.level=ALL
执行。这是TLS版本问题服务器不支持Jdk7中默认的TLSv1.0。