ich finde den Fehler in dem Porgramm nicht:
import java.io.*;
import java.net.*;
public class GoogleSeeker
{
public static void main( String args[] ) throws Exception
{
String s = "";
if ( args.length == 0 )
s = "Teletubbies On Tour";
else
for ( int i = 0; i < args.length; i++ )
s += args[i] + " ";
s.trim();
s = "q=" + URLEncoder.encode( s, "UTF-8" );
URL u = new URL( "http://www.google.com/search?"+s);
BufferedReader in = new BufferedReader(
new InputStreamReader( u.openStream() ) );
String line, response = null;
while ( (line = in.readLine()) != null )
response += line+"\n";
System.out.print( response );
}
}
Das Porgramm spricht die Googlesuchmaschine direkt an und falls keine
Suchbegriffe angegeben werden,
sucht es nach "Teletubbies On Tour". Die Klasse URLEncoder kodiert
den String(s) und der Inhalt wird hinter das search cgi Script gehängt,
getrennt durch das Fragezeichen.
Dann wird die Html Seite zeilenweise ausgelesen.
Es kommt in eclipse folgende Fehlermeldung:
Exception in thread "main" java.io.IOException: Server returned HTTP
response code: 403 for URL:
http://www.google.com/search?q=Teletubbies+On+Tour
at sun.net.www.protocol.http.HttpURLConnection.getInputStream(Unknown
Source)
at java.net.URL.openStream(Unknown Source)
at GoogleSeeker.main(GoogleSeeker.java:35)
zu dem Error Code 403 habe ich bei HTTP Return Codes gefunden:
403 (Forbidden). This is a sort of catch-all refusal. If the server
understood the request but, for whatever reason, refuses to fill it, a code
403 will often be returned. The server may or may not explain why it is
sending a 403 response and there is not much you can do about it.
Gibt's da noch eine Chance das Programm zum Laufen zu bringen? Funkioniert
es bei Euch?
Gruss und Danke
Andreas
> Das Porgramm spricht die Googlesuchmaschine direkt an und falls keine
> Suchbegriffe angegeben werden,
> sucht es nach "Teletubbies On Tour". Die Klasse URLEncoder kodiert
> den String(s) und der Inhalt wird hinter das search cgi Script gehängt,
> getrennt durch das Fragezeichen.
> Dann wird die Html Seite zeilenweise ausgelesen.
>
> Es kommt in eclipse folgende Fehlermeldung:
>
> Exception in thread "main" java.io.IOException: Server returned HTTP
> response code: 403 for URL:
> http://www.google.com/search?q=Teletubbies+On+Tour
> Funkioniert
> es bei Euch?
Selbe Exception hier. Da auch eine hartcodierte search-URL mit dem
Programm die Exception bringt, während die selbe URL im Browser
funktioniert, vermute ich, dass sich schlicht Google aus irgendwelchen
Gründen verweigert. Möglicherweise fehlen nach Googles Meinung
irgendwelche Meta-Infos im Header, wenn der Request vom Programm kommt.
Zu einer simplen URL "http://www.google.com" liefert Dein Programm
jedenfalls durchaus etwas, das nach HTML aussieht.
Bye
Achim
> Das Porgramm spricht die Googlesuchmaschine direkt an und falls keine
> Suchbegriffe angegeben werden,
> sucht es nach "Teletubbies On Tour". Die Klasse URLEncoder kodiert
> den String(s) und der Inhalt wird hinter das search cgi Script gehängt,
> getrennt durch das Fragezeichen.
> Dann wird die Html Seite zeilenweise ausgelesen.
>
> Es kommt in eclipse folgende Fehlermeldung:
>
> Exception in thread "main" java.io.IOException: Server returned HTTP
> response code: 403 for URL:
> http://www.google.com/search?q=Teletubbies+On+Tour
> at sun.net.www.protocol.http.HttpURLConnection.getInputStream(Unknown
> Source)
> at java.net.URL.openStream(Unknown Source)
> at GoogleSeeker.main(GoogleSeeker.java:35)
>
Das Programm ist im Prinzip OK. Google reagiert nur auf den Inhalt des
User-Agent Header-Fields im Request. Wenn das etwas wie "Java/x.y.z"
enthält, wird eben nicht das Suchergebnis sondern eine Fehlerseite
ausgegeben. Und beim Abschicken des Requests wird dieses Header-Field
von Java automatisch wie beschrieben gesetzt.
Gruß
mks
> s.trim();
Diese Zeile ist völlig wirkungslos.
Sönke
Markus Schönhaber schrieb in der newsgroup de.comp.lang.java:
> Das Programm ist im Prinzip OK. Google reagiert nur auf den Inhalt des
> User-Agent Header-Fields im Request. Wenn das etwas wie "Java/x.y.z"
> enthält, wird eben nicht das Suchergebnis sondern eine Fehlerseite
> ausgegeben. Und beim Abschicken des Requests wird dieses Header-Field
> von Java automatisch wie beschrieben gesetzt.
Man könnte noch hinzufügen, dass das ganze natürlich funktioniert, wenn
man den Http-Request über eine Socket-Verbindung selbst nachbildet.
Hatte ich mal vor einiger Zeit gemacht, und war auch nicht schwer.
Um einen von Google akzeptierten Zugriff zu bekommen, kann man sich z.B.
den Request eines Netscape-Browsers ansehen (ein Java-10-Zeiler).
Ciao,
Ingo
--
Immer auf dem aktuellen Stand mit den Newsgroups von freenet.de:
http://newsgroups.freenet.de
das Programm ist es nicht, sondern Google.
Google will alles, was nach Automat aussieht
ausschließen (Du könntest Dir ja nach Tagen, Monaten ?
des Google durchwurstelns aus den Ergebnissen selber
eine Suchmaschine bauen).
Gruß Walter
Habe mal den Packetyzer angeschmissen und der ist ein wenig redseliger:
"Please see Google's Terms of Service posted at
http://www.google.com/terms_of_service.html"
Kurz mal nachgelesen und offensichtlich dürfen nur User Agenten auf
Google zugreifen, die Google auch kennt. Du müsstest also einen Browser
emulieren. Aber wenns nur um Lernen geht, schlage ich dir folgendes vor:
Ändere einfach die folgenden Zeilen:
s = URLEncoder.encode( s, "UTF-8" );
URL u = new URL(
"http://suche.fireball.de/cgi-bin/pursuit?query="+s+"&cat=fb_loc&enc=utf-8");
Und jetzt sollte was gehen!
Dann gibt es da noch den Webservice von Google:
http://www.codeguru.com/Csharp/Csharp/cs_webservices/tutorials/article.php/c8785/
http://www.google.com/apis/
... alles nicht ausprobiert...
Gruss
Dieter