W pewniej internetowej gierce warstwa widoku wywołuje publiczne API. Dzięki temu można ją odpytać o zestaw użytkowników i ich dane/parametry. Parametry przeciwników przydają się do ustalania strategii gry. I tak gdy jestem zalogowany i wpiszę w przeglądarkę (w innej karcie): "https://www.taka_tam_strona.pl/api/users/1000/profile", gdzie 1000 to id użytkownika/innego gracza, to otrzymuję jego dane w postaci json-a.
Chciałbym to wykorzystać od ściągania danych innych użytkowników. Napisałem w tym celu klasę:
import javax.json.*;
import java.io.InputStream;
import java.net.URL;
import javax.net.ssl.HttpsURLConnection;
public class jsonread {
public void getJson(int id) throws Exception {
String url = "https://www.takie_tam.pl/api/users/"+Integer.toString(id)+"/profile";
URL obj = new URL(url);
HttpsURLConnection con = (HttpsURLConnection) obj.openConnection();
InputStream in = con.getInputStream();
//InputStream in = new FileInputStream("zawodnik.txt");
JsonObject gracz = null;
JsonReader rdr = Json.createReader(in);
gracz = rdr.readObject();
rdr.close();
if(gracz != null){
String nickname = gracz.getString("nickname");
JsonObject status = gracz.getJsonObject("stats");
int real_reflex = status.getInt("real_reflex");
int real_intercept = status.getInt("real_intercept");
int real_accuracy = status.getInt("real_accuracy");
int real_strength = status.getInt("real_strength");
int admiration = status.getInt("admiration");
String line = nickname + "\t"
+ Integer.toString(admiration) + "\t"
+ Integer.toString(real_strength) + "\t"
+ Integer.toString(real_accuracy) + "\t"
+ Integer.toString(real_reflex) + "\t"
+ Integer.toString(real_intercept);
System.out.println(line);
}
}
}
Powyższy kod w swojej pierwszej części radzi sobie z czytaniem zawartości stron https a jego druga część radzi sobie z czytaniem JSON-a (testowane na pliku). Niestety, mimo, że wywołując tę metodę jestem zalogowany to otrzymuję komunikat: *"java.io.IOException: Server returned HTTP response code: 401 for URL: https:*www.takie_tam.pl/api/users/1000/profile"//
Co jest nie tak? Wygląda na to, że metoda openConnection() łączyła się ze stroną w oknie innej przeglądarki. Jak uwierzytelnić połączenie?