Почему код состояния http отличается при использовании «apache httpclient» и «httpurlconnection»? - PullRequest
0 голосов
/ 24 мая 2018

Я сейчас внедряю 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?

1 Ответ

0 голосов
/ 24 мая 2018

GET запросы не имеют содержимого.

Удалите conn2.setDoOutput(true); и все строки, используя outputStream.

...