IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

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

V předchozím kvízu, Online test znalostí Java, jsme si ověřili nabyté zkušenosti z kurzu.

Aktivity
Avatar
Petr Novotný:22.2.2019 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.2.2019 19:36
 
Odpovědět
22.2.2019 19:34
Avatar
Neználek
Člen
Avatar
Odpovídá na Petr Novotný
Neználek:24.2.2019 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.2.2019 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.