2014-06-29 14 views
5

Ich bin neu mit Jsoup, aber ich kann nicht verstehen, warum ich einen 404-Fehler beim Versuch erhalten, eine Seite zu erhalten, auch wenn die Seite über den Browser zugänglich ist und ich keine Proxys verwenden. Ich habe mit dem folgenden Code versucht:Jsoup 404 Fehler

private static Document connect() { 
    String url = "http://www.transfermarkt.co.uk/real-madrid/startseite/verein/418"; 
    Document doc = null; 
    try { 
     doc = Jsoup.connect(url).get(); 
    } catch (NullPointerException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } catch (HttpStatusException e) { 
     e.printStackTrace(); 
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
    return doc; 
} 

und ich erhalte die Ausnahmemeldung:

org.jsoup.HttpStatusException: HTTP error fetching URL. Status=404, URL=http://www.transfermarkt.co.uk/real-madrid/startseite/verein/418 
at org.jsoup.helper.HttpConnection$Response.execute(HttpConnection.java:449) 
at org.jsoup.helper.HttpConnection$Response.execute(HttpConnection.java:424) 
at org.jsoup.helper.HttpConnection.execute(HttpConnection.java:178) 
at org.jsoup.helper.HttpConnection.get(HttpConnection.java:167) 
at ro.pago.ucl2015.UCLWebParser.connect(UCLWebParser.java:27) 
at ro.pago.ucl2015.UCLWebParser.main(UCLWebParser.java:16) 

Antwort

18

Es scheint, dass die Website nicht Bots erlaubt und es wird eine 404 Fehlerreaktion im Fall werfen Es findet die User-Agent-Header nicht. Das funktioniert so wie es der User-Agent setzt headers

private static Document connect() { 
    String url = "http://www.transfermarkt.co.uk/real-madrid/startseite/verein/418"; 
    Document doc = null; 
    try { 
     doc = Jsoup.connect(url) 
       .userAgent("Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:25.0) Gecko/20100101 Firefox/25.0") 
       .referrer("http://www.google.com")    
       .get(); 
    } catch (NullPointerException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } catch (HttpStatusException e) { 
     e.printStackTrace(); 
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
    return doc; 
} 

User Agenten

Der Hypertext Transfer Protocol (HTTP) identifiziert die Client-Software die Anforderung stammt, einen „User-Agenten mit "Header, auch wenn der Client nicht von einem Benutzer betrieben wird.


Referrer- (ich glaube nicht, das notwendig ist)

Referrer (ursprünglich eine falsche Schreibweise von Referrer) ist ein HTTP-Header Feld, das die Adresse der Webseite identifiziert (dh die URI oder IRI) , die mit der angeforderten Ressource verknüpft ist.

Nur um vollen Service zu bieten, rate ich Ihnen, die Timeout-Zeit für Ihre Anfragen zu setzen. Der Standardwert ist 3 Sekunden. Wenn der Server länger dauert, erhalten Sie eine Ausnahme von . Balg folgt Ihrem Code mit Timeout-Setzer. Setzen Sie es für die längste mögliche Zeitspanne auf Null.

private static Document connect() { 
    String url = "http://www.transfermarkt.co.uk/real-madrid/startseite/verein/418"; 
    Document doc = null; 
    try { 
     doc = Jsoup.connect(url) 
       .userAgent("Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:25.0) Gecko/20100101 Firefox/25.0") 
       .referrer("http://www.google.com") 
       .timeout(1000*5) //it's in milliseconds, so this means 5 seconds.    
       .get(); 
    } catch (NullPointerException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } catch (HttpStatusException e) { 
     e.printStackTrace(); 
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
    return doc; 
} 
+0

Dank sicher lösen !! Es funktionierte. Es tut mir leid, dass ich dir nicht antworten kann, du verdienst es. Können Sie erklären, was mit userAgent und Referrer-Methoden passiert? Was ist ihre Rolle? Danke nochmal – mawus

+0

Kein Problem. Die Tatsache, dass Sie den zusätzlichen Schritt unternommen haben, um mir mit einem Kommentar zu danken, ist mehr als genug. Es freut mich, dass ich helfen konnte. P.S. Überprüfen Sie mein Update. – alkis

+0

Es funktioniert für mich, danke –

11

Wenn in Fall, dass Sie Antwortcode 404 erhalten, können Sie diese URL

Verwenden ignoreHttpErrors (true) überspringen, wird Ihr Problem

Document doc3 = null; 
    try { 
     doc3 = Jsoup.connect(url).userAgent("Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:25.0) Gecko/20100101 Firefox/25.0") 
       .referrer("http://www.google.com").ignoreHttpErrors(true).get(); 

    } catch (NullPointerException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    }