2017-04-19 10 views
0

저는 프로젝트의 주식 시장 데이터를 수집하고 있으며 지난 몇 달 동안 그렇게 해왔습니다. 그러나 며칠 전 야후에서 데이터를 다운로드하는 데 사용한 URLConnection은 변경되지 않았고 그 전에는 완벽하게 작동했지만 null이되었습니다. 야후에서 보낸 URL은 내가 읽고 인쇄 한 csv 파일을 다운로드하고 URL은 유효하며 브라우저에서 이동하면 작동하지만 코드에 연결하면 URLConnection이 null입니다. 다른 주식을 가지고 노는 것도 도움이되지 못했습니다.Java URLConnection이 유효한 URL에 대해 null을 반환합니다.

private URL url = null; 
private URLConnection urlConn = null; 
private InputStreamReader inStream = null; 
try { 
     //http://ichart.finance.yahoo.com/table.csv?s=^FTSE&d=3&e=18&f=2017&g=d&a=1&b=14&c=2017 
     this.url = new URL(urlStr); 
        System.out.println(url.toString()); 
     this.urlConn = url.openConnection(); 
     this.urlConn.connect(); 

     //Start Reading 
     this.inStream = new InputStreamReader(this.urlConn.getInputStream()); 
     BufferedReader buff= new BufferedReader(this.inStream); 
     System.out.println(buff.readLine()); 
}catch (MalformedURLException e) { 
     System.out.println(e.getMessage()); 
}catch(IOException e){ 
     System.out.println(e.getMessage()); 
} 
+0

IOException을 예외로 변경하면 캐치해야 할 예외가 누락되어 있는지 확인하십시오. 403 오류 일 수 있습니다. – Sedrick

+1

'URLConnection'은 * not * null입니다. 'readLine()'이 * null을 반환하거나 예외가 발생합니다. 정확해라. – EJP

답변

2

curl을 사용하면 URL이 https로 리디렉션되었음을 알 수 있습니다.

$ curl -v -H "Content-Type: text/csv" "http://ichart.finance.yahoo.com/table.csv?s=^FTSE&d=3&e=18&f=2017&g=d&a=1&b=14&c=2017" 
* Trying 98.139.199.204... 
* Connected to ichart.finance.yahoo.com (98.139.199.204) port 80 (#0) 
> GET /table.csv?s=^FTSE&d=3&e=18&f=2017&g=d&a=1&b=14&c=2017 HTTP/1.1 
> Host: ichart.finance.yahoo.com 
> User-Agent: curl/7.43.0 
> Accept: */* 
> Content-Type: text/csv 
> 
< HTTP/1.1 301 Moved Permanently 
< Date: Wed, 19 Apr 2017 02:48:29 GMT 
< Via: http/1.1 media-router68.prod.media.bf1.yahoo.com (ApacheTrafficServer [c s f ]), http/1.1 r23.ycpi.bf1.yahoo.net (ApacheTrafficServer [cMsSfW]) 
< Server: ATS 
< Location: https://ichart.finance.yahoo.com/table.csv?s=^FTSE&d=3&e=18&f=2017&g=d&a=1&b=14&c=2017 
< Content-Length: 0 
< Age: 0 
< Connection: keep-alive 
< 
* Connection #0 to host ichart.finance.yahoo.com left intact 

http 대신 http를 사용하도록 URL을 변경하십시오. 귀하의 코드 내에서 URL에 https를 사용하도록 변경했습니다.

+1

이것은 문제를 해결했습니다! 아주 간단합니다. 매우 감사합니다! – Fernando

+1

@ Fernando :이 답변이 도움이된다면 동의하십시오. –