Využij akce až 30 % zdarma při nákupu e-learningu. Více informací. Zároveň je tento týden sleva až 80 % na e-learning týkající se C# .NET
Hledáme nového kolegu do redakce - 100% home office, 100% flexibilní pracovní doba. Více informací.
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
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.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.