Java服务端获取360token时候报错:Server returned HTTP response code: 400 for URL
樊鹏飞 2014-07-07 09:15:15 报错内容:
Exception in thread "main" java.io.IOException: Server returned HTTP response code: 400 for URL: https://openapi.360.cn/oauth2/access_token
at sun.net.www.protocol.http.HttpURLConnection.getInputStream(Unknown Source)
at sun.net.www.protocol.https.HttpsURLConnectionImpl.getInputStream(Unknown Source)
at com.centurymedia.summer.test.TrustSSL.readContentFromPost(TrustSSL.java:77)
at com.centurymedia.summer.test.TestAndroidQihooAccessToken.main(TestAndroidQihooAccessToken.java:45)
源代码:
public class TestAndroidQihooAccessToken {
public static void main(String[] args) throws IOException {
//测试用例
String url = "https://openapi.360.cn/oauth2/access_token";
String parm = "";
TrustSSL.readContentFromPost(url, parm);
}
}
public static void readContentFromPost(String url,String param) throws IOException{
// Post请求的url,与get不同的是不需要带参数
//设置SSLContext
try {
SSLContext sc = SSLContext.getInstance("SSL");
sc.init(null, new TrustManager[] { new TrustAnyTrustManager() },
new java.security.SecureRandom());
// 打开连接
URL console = new URL(url);
HttpsURLConnection connection = (HttpsURLConnection) console.openConnection();
connection.setSSLSocketFactory(sc.getSocketFactory());
// 设置是否向connection输出,因为这个是post请求,参数要放在
// http正文内,因此需要设为true
connection.setDoOutput(true);
connection.setDoInput(true);
connection.setRequestMethod("POST");
// Post 请求不能使用缓存
connection.setUseCaches(false);
// URLConnection.setFollowRedirects是static函数,作用于所有的URLConnection对象。
// URLConnection.setInstanceFollowRedirects是成员函数,仅作用于当前函数
connection.setInstanceFollowRedirects(true);
// 配置本次连接的Content-type,配置为application/x-www-form-urlencoded的
// 意思是正文是urlencoded编码过的form参数,下面我们可以看到我们对正文内容使用URLEncoder.encode
// 进行编码
connection.setRequestProperty("Content-Type","application/x-www-form-urlencoded");
// 连接,从postUrl.openConnection()至此的配置必须要在connect之前完成,
// 要注意的是connection.getOutputStream会隐含的进行connect。
connection.connect();
DataOutputStream out = new DataOutputStream(connection.getOutputStream());
//对含有空格的参数进行处理
// 正文,正文内容其实跟get的URL中'?'后的参数字符串一致
out.writeBytes(param);
out.flush();
out.close(); // flush and close
BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream(),"ISO88591-1"));//设置编码,否则中文乱码
String line="";
while ((line = reader.readLine()) != null){
System.out.println(line);
}
reader.close();
connection.disconnect();
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (KeyManagementException e) {
e.printStackTrace();
}
}
求大神解。。。。