Wenn Sie den Inhalt einer Web-Seite ausdrucken möchten, müssen Sie arbeiten mit dem Protokoll HTTP. Sie müssen es sich nicht realisieren, ist die beste Art und Weise ist es, bestehende Implementierungen zu verwenden, wie zum Beispiel die Java-API HttpURLConnection oder Apache HttpClient
Hier ist ein Beispiel dafür, wie es mit HttpURLConnection zu tun:
URL url = new URL("http","www.google.com");
HttpURLConnection urlc = (HttpURLConnection)url.openConnection();
urlc.setAllowUserInteraction(false);
urlc.setDoInput(true);
urlc.setDoOutput(false);
urlc.setUseCaches(true);
urlc.setRequestMethod("GET");
urlc.connect();
// check you have received an status code 200 to indicate OK
// get the encoding from the Content-Type header
BufferedReader in = new BufferedReader(new InputStreamReader(urlc.getInputStream()));
String line = null;
while((line = in.readLine()) != null) {
System.out.println(line);
}
// close sockets, handle errors, etc.
Wie Wie oben beschrieben, können Sie Datenverkehr speichern, indem Sie den Accept-Encoding-Header hinzufügen und den Header Content-Encoding der Antwort überprüfen. Hier
ist ein Httpclient Beispiel, genommen von here:
// Create an instance of HttpClient.
HttpClient client = new HttpClient();
// Create a method instance.
GetMethod method = new GetMethod(url);
// Provide custom retry handler is necessary
method.getParams().setParameter(HttpMethodParams.RETRY_HANDLER,
new DefaultHttpMethodRetryHandler(3, false));
try {
// Execute the method.
int statusCode = client.executeMethod(method);
if (statusCode != HttpStatus.SC_OK) {
System.err.println("Method failed: " + method.getStatusLine());
}
// Read the response body.
byte[] responseBody = method.getResponseBody();
// Deal with the response.
// Use caution: ensure correct character encoding and is not binary data
System.out.println(new String(responseBody));
} catch (HttpException e) {
System.err.println("Fatal protocol violation: " + e.getMessage());
e.printStackTrace();
} catch (IOException e) {
System.err.println("Fatal transport error: " + e.getMessage());
e.printStackTrace();
} finally {
// Release the connection.
method.releaseConnection();
}
Bitte zeigen Sie ein kurzes, aber * vollständiges * Beispiel. Sie haben nicht angegeben, wie Sie Google die Anfrage senden. Wenn Sie beispielsweise angeben, dass Sie mit gezippten Daten umgehen können, müssen Sie zuerst die Ausgabe dekomprimieren. –
(Beachten Sie auch, dass Ihr aktueller Code effektiv ISO-Latin-1 annimmt.) –
hi, nachdem ich den neuen Socket() geöffnet habe; Ich mache ein "get index.html" und sende es an "out", indem ich versuche, das "in" wie den Code oben zu bekommen. Ich habe nicht angegeben, griff gezippt, wie Sie herausfinden, ob es gezippt ist? – cometta