Logfile auslesen 403 Fehler
lima-city → Forum → Programmiersprachen → Java
agent
anfrage
auslese
code
datei
folgenden code
gecko
header
host
http
inhalt
leser
null
pfad
problem
server
string
teil
url
zeichen
-
Hi Leute,
ich habe in der Vergangenheit öfter ein kleines Java Programm genutzt, um meine Logfiles auszulesen. Das hat auch immer funktioniert. Jetzt bin ich seit kurzem auch hier aktiv habe eine kleine Website erstellt, die auch ein Logfile erstellt und wollte dieses wieder mit meinem alten Programm auslesen. Das sagt mir jedoch prommt:
java.io.IOException: Server returned HTTP response code: 403
Ich bin natürlich davon ausgegangen, dass ".txt" Dateien vielleicht standardmäßig gesperrt sind und habe das Logfile mit meinem Firefox angesteuert. Leider erscheint das Logfile dort ohne Probleme.
Zum Auslesen verwende ich folgenden Code:
public static String readweb(String pfad){ try{ URL url = new URL(pfad); BufferedReader leser = new BufferedReader(new InputStreamReader(url.openStream())); StringBuffer inhalt = new StringBuffer(); int zeichen = leser.read(); while(zeichen != -1){ inhalt.append((char)zeichen); zeichen = leser.read(); } leser.close(); return inhalt.toString(); } catch(Exception e){ FLog.warning("FGen", "readweb", "Website: " + pfad + " konnte nicht geöffnet werden!", e); return null; } }
Ich hoffe euch fällt was ein ;). -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Du benutzt bei deinem Request keinen User-Agent, solche Anfragen sind bei lima-city gesperrt. Setz einfach einen gültigen „User-Agent“ Header, dann sollte es gehen.
Lg cookies
PS: So ein Header wäre z.B. „Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.2.13) Gecko/20101211 Firefox/3.6.13“
Beitrag zuletzt geändert: 21.12.2010 18:47:45 von cookies -
Die Idee ist bestimmt richtig da ich ja überhaupt keinen Header verwende. Ich hab den Code folgendermaßen verändert, sodass der Header jetzt eigentlich mitgeschickt werden müsste. Ändern tut sich jedoch nichts das Ergebnis ist weiterhin der 403 Fehler. Muss ich vielleicht einen kompletten Header mit noch so anderen Dingen wie Server, Host mitschicken? Oder ist was an dem Code falsch? (Das mit dem ganzen Header hab ich noch nicht so ganz verstanden, was man da alles mitschicken muss)
try{ URL url = new URL(pfad); //Neuer Teil ab hier \/ URLConnection conn = url.openConnection(); String header = ""; header += "Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.2.13) Gecko/20101211 Firefox/3.6.13"; conn.setDoOutput(true); OutputStreamWriter wr = new OutputStreamWriter(conn.getOutputStream()); wr.write(header); wr.flush(); BufferedReader leser = new BufferedReader(new InputStreamReader(conn.getInputStream())); //Neuer Teil endet hier /\ //BufferedReader leser = new BufferedReader(new InputStreamReader(url.openStream())); StringBuffer inhalt = new StringBuffer(); int zeichen = leser.read(); while(zeichen != -1){ inhalt.append((char)zeichen); zeichen = leser.read(); } leser.close(); return inhalt.toString(); } catch(Exception e){ FLog.warning("FGen", "readweb", "Website: " + pfad + " konnte nicht geöffnet werden!", e); return null; }
Der markierte Bereich ist neu. -
Also ich seh daraus jetzt nicht so ganz, was du im Header stehen hast.
Für meine Begriffe sollte die ganze Anfrage so aussehen:
GET /pfad/datei HTTP/1.1 Host: gw2tools.lima-city.de User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.2.13) Gecko/20101211 Firefox/3.6.13
Das dürfte schon reichen.
Der teil mit GET und Host dürfte schon von URL.openConnection übernommen werden, da ich in deinem Code davon noch nichts gesehen habe und es ohne nicht funktionieren sollte.
Wichtig ist das User-Agent: ...
Ich bin mir auch nicht sicher, ob du die header dann einfach noch schicken kannst oder ob die noch direkt mit an conn übergeben werden müssen.
[edit]
Tippfehler ^^
Beitrag zuletzt geändert: 22.12.2010 12:32:52 von sektor -
Problem gelöst :D
Folgende Zeile fügt ein Parameter zum Html Request hinzu:
conn.addRequestProperty("User-Agent", "Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.2.13) Gecko/20101211 Firefox/3.6.13");
Der gesammte Code sieht dann so aus:
public static String readweb(String pfad){ // Die Url muss dem folgendem Schema entsprechen: http://www.???.?? try{ URL url = new URL(pfad); URLConnection conn = url.openConnection(); conn.addRequestProperty("User-Agent", "Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.2.13) Gecko/20101211 Firefox/3.6.13"); BufferedReader leser = new BufferedReader(new InputStreamReader(conn.getInputStream())); //BufferedReader leser = new BufferedReader(new InputStreamReader(url.openStream())); StringBuffer inhalt = new StringBuffer(); int zeichen = leser.read(); while(zeichen != -1){ inhalt.append((char)zeichen); zeichen = leser.read(); } leser.close(); return inhalt.toString(); } catch(Exception e){ FLog.warning("FGen", "readweb", "Website: " + pfad + " konnte nicht geöffnet werden!", e); return null; } }
Geholfen hat mir dieserBeitrag.
Vielen Dank auch für die Hilfe hier! -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage