Я сейчас внедряю weibo oauth2 login.Я использовал два метода - apache httpclient и httpurlconnection.Но код ответа HTTP отличается в двух случаях.
String accessToken = "***";
String weiboUid = "***";
try {
URL url = new URL("https://api.weibo.com/2/users/show.json?access_token=" + accessToken + "&uid=" + weiboUid);
conn2 = (HttpURLConnection) url.openConnection();
conn2.setConnectTimeout(10000);
conn2.setDoInput(true);
conn2.setDoOutput(true);
conn2.setRequestMethod("GET");
outputStream = conn2.getOutputStream();
outputStream.flush();
int responseCode = conn2.getResponseCode();
StringBuilder responseReq = new StringBuilder();
if (responseCode == HttpURLConnection.HTTP_OK) {
String line;
BufferedReader br = new BufferedReader(new InputStreamReader(conn2.getInputStream()));
while ((line = br.readLine()) != null) {
responseReq.append(line).append("\n");
}
br.close();
} else {
throw new Exception("data not exist!");
}
String result = responseReq.toString().trim();
JsonParser parser = new JsonParser();
JsonObject jsonObject = parser.parse(result).getAsJsonObject();
String nickname = jsonObject.get("screen_name").getAsString();
System.out.println(nickname);
} catch (Exception e) {
e.printStackTrace();
} finally {
if (outputStream != null) {
try {
outputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (conn2 != null)
conn2.disconnect();
}
В этом случае responseCode имеет значение 405 и исполняется "throw new Exception("data not exist!");
".
Но когда я использую библиотеку apache httpclient, код ответаэто 200, и я могу получить информацию для входа в систему.
String accessToken = "***";
String weiboUid = "***";
HttpClient client = new DefaultHttpClient();
HttpGet request = new HttpGet("https://api.weibo.com/2/users/show.json?access_token=" + accessToken + "&uid=" + weiboUid);
try {
HttpResponse response = client.execute(request);
System.out.println("Response Code : " +
response.getStatusLine().getStatusCode());
BufferedReader rd = new BufferedReader(
new InputStreamReader(response.getEntity().getContent()));
StringBuffer result = new StringBuffer();
String line = "";
while ((line = rd.readLine()) != null) {
result.append(line);
}
System.out.println(result.toString());
} catch (IOException e) {
e.printStackTrace();
}
В чем разница между apache httpclient и httpurlconnection?