2016-04-11 4 views
0

So habe ich den folgenden Code verwendet, um ein bestimmtes Element auf einer Seite mit der spezifischen ID in der Methode zu finden. Es scheint jedoch, dass die Website einen 403 zurückgibt, wenn ich keinen User-Agent definiere, und ich bekomme einen 503-Fehler, wenn ich einen User-Agent verwende. Die Webseite scheint cloudflare zu verwenden, was von dem, was ich gehört habe, verwendet wird, um DDOS-Angriffe zu verhindern - also bin ich etwas verwirrt, warum ich die Seite nicht lesen kann?Fehler 503, wenn JSoup zum Lesen eines Elements von einer Webseite verwendet wird

public static String getMargin(final int id) { 
     String url = "https://rsbuddy.com/exchange?id=" + id + "&"; 
     Document document = null; 
     try { 
      document = Jsoup.connect(url).timeout(30000) 
        .userAgent(
          "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.87 Safari/537.36") 
        .get(); 
     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
     return document.select("#buy-price").text(); 

    } 

Wie würde ich in der Lage sein, es zu haben, so dass ich schließlich das Element von der Webseite anstelle dem Empfangen einen 403 verboten oder 503 nicht verfügbar Fehler lesen kann? Vielen Dank.

Antwort

1

Sie mit ignoreHttpErrors verbinden müssen eingestellt

Jsoup.connect(url).timeout(30000) 
    .ignoreHttpErrors(true) 
    ... 

Der Seiteninhalt wird sein, was Sie sehen, wenn Sie Ihren Browser Verbindung über. Diese Seite enthält ein kleines Skript (sieht aus wie es bei jeder Anfrage generiert wird). Das Skript wird einen Wert berechnen, die sie setzt in das jschl-answer Feld das folgende Formular vor dem Absenden

<form id="challenge-form" action="/cdn-cgi/l/chk_jschl" method="get"> 
    <input type="hidden" name="jschl_vc" value="some-generated-value"> 
    <input type="hidden" name="pass" value="some-generated-value"> 
    <input type="hidden" id="jschl-answer" name="jschl_answer"> 
</form> 

Die Form die richtigen Werte werden muss vorgelegt verwenden (auch nicht vergessen zu bekommen/Cookies) .

Also der Schlüsselpunkt wird sein, die jschl-answer entweder durch die Suche nach ihrem Algorithmus (das wird hart sein) oder durch das Lesen der script Tag, ändern, um in der Lage zu sein, lokal auszuführen und lokal ausführen.

Alles in allem wird es keine leichte Aufgabe, aber ich denke es ist machbar.

0

Jsoup ist nicht das beste Werkzeug hier. Bevor Sie auf die aktuelle Seite zugreifen, müssen Sie eine Lösung finden. Ich würde vorschlagen, dass Sie unter einem der Werkzeuge verwenden:

Sie weniger Kopfschmerzen haben werden ...

Verwandte Themen