2017-04-20 5 views
0

Ich habe die Yahoo Finance "API" mit dem unten stehenden Code für ein paar Wochen verwendet. Seit ungefähr einer Woche hat es aufgehört zu arbeiten. Wenn Sie diese Adresse eingeben: http://ichart.yahoo.com/table.csv?s=MSFT, erhalten Sie einige historische Daten für Microsoft (mein Browser lädt es automatisch herunter). Wenn ich versuche, es über Java zu lesen, wird der Stream anscheinend geöffnet (ich erhalte keine Ausnahme), der Stream enthält jedoch keine Daten. Wer weiß, warum der gepufferte Leser nicht in der Lage ist, das Objekt so zu streamen, wie es in den vergangenen Wochen möglich war? Ich vermute, dass Yahoo vielleicht ein Java-Skript hinzugefügt hat, um das automatische Herunterladen zu blockieren.Yahoo Finance API Java CSV herunterladen

URL url = new URL("http://ichart.yahoo.com/table.csv?s=" + symbol); 
URLConnection hc = url.openConnection(); 
hc.setRequestProperty("User-Agent", "Mozilla/5.0 (Windows NT 4.10; rv:52.0) Gecko/20100101 Firefox/52.0"); 
BufferedReader in = new BufferedReader(new InputStreamReader(hc.getInputStream())); 
    br.readLine(); 
    //Read File Line By Line 
    String strLine; 
    while ((strLine = br.readLine()) != null) { 
     System.out.println(strLine); 
    } 
    br.close(); 
+0

Darf ich vorschlagen, dass Sie ein Tool wie Wireshark verwenden, um die tatsächliche Kommunikation zwischen Ihnen und Yahoo! Zu sehen. –

Antwort

1

Sie können die URL von "http" zu "https" ändern, was ohne Probleme funktioniert.

-2

Versuchen Sie, diesen Code von einem anderen Netzwerk auszuführen. Das gibt Ihnen Klarheit darüber, ob Yahoo das automatische Herunterladen blockiert oder nur das Netzwerk, das Sie verwenden, auf die schwarze Liste gesetzt hat.

+0

Haben Sie in der Frage gelesen, dass es vom Browser aus funktioniert? – tak3shi

1

Viele Websites suchen nach einer User Agent-Zeichenfolge und blockieren den Zugriff, wenn keine Zeichenfolge gesendet wurde, um den automatischen Zugriff zu blockieren.

Dies ist ein Beispiel, wie Sie die Zeichenfolge User Agent hinzufügen:

URL url = new URL("http://ichart.yahoo.com/table.csv?s=MSFT"); 
    URLConnection hc = url.openConnection(); 
    hc.setRequestProperty("User-Agent", "Mozilla/5.0 (Windows NT 4.10; rv:52.0) Gecko/20100101 Firefox/52.0"); 
+0

Danke tak3shi, ich habe den ursprünglichen Post bearbeitet, um Ihren Vorschlag zu enthalten, aber der Stream-Reader ist noch leer. – PentiumPro200

1

den Grund der Java-Kommunikation funktioniert nicht verstehen, die HTML-Kommunikation verfolgen. Ich habe den Chrome-Browser mit aktivierter HTTP-Trace-Erweiterung verwendet. Die Trace-Ausgabe zeigt, dass die Verbindung http://ichart.yahoo.com/table.csv?s=^GSPC umleitet https://ichart.yahoo.com/table.csv?s=^GSPC.

In Java müssen Sie eine URL-Verbindung implementieren, um der Weiterleitung zu folgen. Ein Beispiel für das Folgen der Umleitung ist http://www.mkyong.com/java/java-httpurlconnection-follow-redirect-example/. Ändern Sie das Beispiel, indem Sie Ihre URL-Zeichenfolge übergeben, und Sie sollten die erwartete Ausgabe erhalten.

Verwandte Themen