Как получить код с URL авторизации API Instagram? - PullRequest
0 голосов
/ 29 апреля 2019

Я пытаюсь получить параметр ?code=xxxxxxxx из API Instagram из следующего AuthURL: https://api.instagram.com/oauth/authorize/?client_id=18425222ebe44b71b09b293fb771c69f&redirect_uri=https%3A%2F%2Ffresh-air.cloud&response_type=code&scope=likes comments

Когда эта ссылка выполняется в браузере, например, Chrome, параметр ?code=xxxxxxxx добавляется к redirect_uri, но мне нужно получить этот код программно, используя Java.

Я пробовал следующие методы:

private String getVerifierCode(String authUrl) {
 try {
  URL url = new URL(authUrl);
  HttpURLConnection con = (HttpURLConnection) url.openConnection();
  con.setRequestMethod("GET");
  con.setRequestProperty("Content-Type", "application/json");
  con.setConnectTimeout(5000);
  con.setReadTimeout(5000);
  con.setInstanceFollowRedirects(true);
  System.out.println(getFullResponse(con));
 } catch (Throwable th) {
  th.printStackTrace();
 }
 return null;
}

private String getFullResponse(HttpURLConnection con) throws IOException {
 StringBuilder fullResponseBuilder = new StringBuilder();

 fullResponseBuilder.append(con.getResponseCode())
  .append(" ")
  .append(con.getResponseMessage())
  .append("\n");

 con.getHeaderFields()
  .entrySet()
  .stream()
  .filter(entry -> entry.getKey() != null)
  .forEach(entry -> {

   fullResponseBuilder.append(entry.getKey())
   .append(": ");

   List < String > headerValues = entry.getValue();
   Iterator < String > it = headerValues.iterator();
   if (it.hasNext()) {
    fullResponseBuilder.append(it.next());

    while (it.hasNext()) {
     fullResponseBuilder.append(", ")
      .append(it.next());
    }
   }

   fullResponseBuilder.append("\n");
  });

 Reader streamReader = null;

 if (con.getResponseCode() > 299) {
  streamReader = new InputStreamReader(con.getErrorStream());
 } else {
  streamReader = new InputStreamReader(con.getInputStream());
 }

 BufferedReader in = new BufferedReader(streamReader);
 String inputLine;
 StringBuilder content = new StringBuilder();
 while ((inputLine = in .readLine()) != null) {
  content.append(inputLine);
 }

 in .close();

 fullResponseBuilder.append("Response: ")
  .append(content);

 return fullResponseBuilder.toString();
}

За исключением того, что это привело к 400 неправильный код состояния запроса:

400 Bad Request
Connection: close
Content-Length: 105
Date: Mon, 29 Apr 2019 16:46:16 GMT
Content-Type: text/html; charset=utf-8
Response: <html><head><title>5xx Server Error</title></head><body><h1>5xx Server Error</h1></body></html>

Есть ли способ получить параметр ?code=xxxxxxxx в любом случае?

...