mithilfe von sockets zu Holen, eine Webseite mit java
Möchte ich zum abrufen einer Webseite, nur das abrufen der Daten (nicht der Analyse oder Rendern nichts), nur fangen die Daten zurückgegeben, nachdem ein http-request.
Ich versuche, dies zu tun mit den high-level-Klasse Buchse der JavaRuntime-Bibliothek.
Frage ich mich, ob dies möglich ist da ich bin nicht bei der Leichtigkeit, herauszufinden, die unter Schicht verwendet für diese zwei-Punkt-Kommunikation oder-ich weiß nicht, ob das Problem ist aus meiner eigenen system.
.
Hier ist, was mein code tut:
1) Einstellung der Buchse.
this.socket = new Socket( "www.example.com", 80 );
2) die entsprechenden streams verwendet für diese Mitteilung.
this.out = new PrintWriter( socket.getOutputStream(), true);
this.in = new BufferedReader( new InputStreamReader( socket.getInputStream() ) );
3) die Seite anfordern (und dies ist, wo ich nicht sicher bin, ob es in Ordnung ist zu tun, wie auch dieses).
String query = "";
query += "GET /HTTP/1.1\r\n";
query += "Host: www.example.com\r\n";
...
query += "\r\n";
this.out.print(query);
4) Sie das Ergebnis ablesen (nichts in meinem Fall).
System.out.print( this.in.readLine() );
5) socket schließen und Bäche.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Sie auf einem *nix-system, Blick in CURL, die es Ihnen ermöglicht das abrufen von Informationen aus dem internet über die Befehlszeile. Leichter als ein Java-socket-Verbindung.
Wenn Sie möchten, verwenden Sie Java, und nur das abrufen von Informationen aus einer Webseite, schauen Sie sich die Java-URL-Bibliothek (java.net.URL). Einige Beispiel-Java-code:
Werde, ergreifen Sie die angegebene URL, nehmen Sie die Daten (html-Codes in diesem Fall) und spucken ihn aus der Konsole. Vielleicht zwicken die Trennzeichen abit, aber dies funktioniert mit den meisten Endpunkte im Netzwerk Daten zu senden.
Dein code sieht ziemlich nahe. Ihre GET-Anforderung ist wohl der fehlerhafte in gewisser Weise. Versuchen Sie Folgendes: öffnen einer telnet-client und eine Verbindung zu einem web-server. Fügen Sie in der GET-Anforderung, wie Sie glauben, dass es funktionieren sollte. Sehen Sie, wenn das gibt nichts. Wenn es nicht bedeutet, dass es ein problem mit der GET-Anfrage. Die einfachste Sache zu tun, dieser Punkt würde ein Programm schreiben, horcht auf einem socket (mehr oder weniger das umgekehrte von dem, was Sie tun) und zeigen Sie einen web-browser auf localhost:[richtigen port] und sehen, was der web-browser sendet. Verwenden Sie diese als Ihre Vorlage für die GET-Anforderung.
Alternativ könnten Sie versuchen, und ein Stück Sie zusammen aus der HTTP-Spezifikation.
Ich hatte, um die vollständige URL der GET-parameter. Zu machen, damit es funktioniert. Obwohl ich sehe, können Sie angeben, HOST-auch, wenn Sie wollen.
Ja, es ist möglich. Sie müssen nur herausfinden, das Protokoll. Sie sind in der Nähe.
Ich würde eine einfache, server-socket, der druckt, was er bekommt. Sie können nun Ihren browser benutzen, um eine Verbindung zu der Buchse mit einer url wie: http://localhost:8080. Dann nutzen Sie Ihre client-socket zu imitieren, um das HTTP-Protokoll vom browser.
Nicht sicher, warum Sie gehen tiefer als
URLConnection
- seine entworfen, um zu tun, was Sie tun möchten: http://download.oracle.com/javase/tutorial/networking/urls/readingWriting.html.Den Java Tutorial auf den Steckern selbst sagt: "- URLs und URLConnections für eine relativ high-level-Mechanismus für den Zugriff auf Ressourcen im Internet. Manchmal wird Ihre Programme erfordern lower-level-network-Kommunikation, zum Beispiel, wenn Sie schreiben wollen, eine client-server-Anwendung." Da du nicht gehst, niedriger ist als HTTP, ich bin mir nicht sicher, was der Punkt ist, der über ein Socket.