Diskuze: Http request na stránku vrací nesmyslný řetězec

Aktivity (2)
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
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.