Předvánoční slevová akce Java týden
Využij předvánočních slev a získej od nás 20 % bodů zdarma! Více zde
Pouze tento týden sleva až 80 % na Java e-learning!
Avatar
Petr Novotný:22. února 19:34

Nejde mi získat odpověď z HTTP požadavku na stránku. Stránka má meta tag pro charset UTF-8 a když požadavek provolám bez jakýchkoliv headerů z postmana, tak dostanu normální odpověď.

Zkusil jsem:

this.cookieManager = new CookieManager();
CookieHandler.setDefault(cookieManager);

URL url = new URL(INIT_URL);

HttpsURLConnection connection = (HttpsURLConnection) url.openConnection();

int code = connection.getResponseCode();
if (code == 200) {
    BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(connection.getInputStream(), "UTF-8"));
    StringBuilder stringBuilder = new StringBuilder();
    String currentLine;

    while ((currentLine = bufferedReader.readLine()) != null) {
        stringBuilder.append(currentLine);
    }

    bufferedReader.close();
} else {
    log.error("Http request failed: {}", code);
}

Chci docílit: Potřebuju vytvořit skript pro interakci s jednou stránkou, která ovšem nemá veřejné API, takže potřebuju, aby se skript choval jako uživatel. (Schraňoval cookiny, hledal v HTML CRSF tokeny atd...)
Za případnou pomoc předem děkuji :)

Editováno 22. února 19:36
 
Odpovědět
22. února 19:34
Tento výukový obsah pomáhají rozvíjet následující firmy, které dost možná hledají právě tebe!
Avatar
Neználek
Člen
Avatar
Odpovídá na Petr Novotný
Neználek:24. února 22:37

Stránka je komprimovaná GZIPem.

Takto jsem se k HTML dostal:

HttpURLConnection connection = (HttpURLConnection) url.openConnection();
int code = connection.getResponseCode();
if (code == 200) {
    String contentEncoding = connection.getContentEncoding();
    System.out.println("Content-Encoding: " + contentEncoding);
    ByteArrayOutputStream buffer = new ByteArrayOutputStream();
    InputStream inputStream = new GZIPInputStream(connection.getInputStream());
    byte[] block = new byte[16];
    int size;
    while ((size = inputStream.read(block)) != -1) {
        buffer.write(block, 0, size);
    }
    inputStream.close();
    String content = buffer.toString(StandardCharsets.UTF_8.name());
    System.out.println(content);
}

ale nerozumím tomu. Myslel jsem, že HttpURLConnection kompresi řeší automaticky.

 
Nahoru Odpovědět
24. února 22:37
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 2 zpráv z 2.