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
得到的结果不同
在使用apachehttpclient
进行本机测试之前。我想其他图书馆的问题也一样
输出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。