Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Error Code 403 bei Suchmaschine

1 view
Skip to first unread message

Andreas Bauer

unread,
Feb 1, 2005, 7:19:57 PM2/1/05
to

Hallo,

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


Achim Peters

unread,
Feb 1, 2005, 8:27:51 PM2/1/05
to
Andreas Bauer wrote:
> ich finde den Fehler in dem Porgramm nicht:
>
> public class GoogleSeeker

> 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

Markus Schönhaber

unread,
Feb 1, 2005, 8:38:16 PM2/1/05
to
Andreas Bauer wrote:
[Programm gesnippt]

> 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önke Müller-Lund

unread,
Feb 2, 2005, 3:03:10 AM2/2/05
to
Andreas Bauer schrieb am Mittwoch, 2. Februar 2005 01:19:

> s.trim();

Diese Zeile ist völlig wirkungslos.

Sönke


Ingo Homann

unread,
Feb 2, 2005, 4:21:01 AM2/2/05
to
Hi!

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


Walter Hipp

unread,
Feb 2, 2005, 3:28:03 AM2/2/05
to

"Andreas Bauer" <andrea...@arcor.de> schrieb im Newsbeitrag
news:42001c78$0$18562$9b4e...@newsread4.arcor-online.net...
[...] Google Suchprogramm

> ich finde den Fehler in dem Porgramm nicht:

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


Dieter Sebastian

unread,
Feb 2, 2005, 9:01:36 AM2/2/05
to
Hier der gleiche Fehler.

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


0 new messages