2016-08-04 2 views
-1

자바 코드를 사용하여 일부 URL의 내용을 가져 오려고합니다. 이 코드는 일부 URL (예 : "http://www.nytimes.com/video/world/europe/100000004503705/memorials-for-victims-of-istanbul-attack.html" )과 같은 내용을 반환하며 일부 URL에 대해서는 아무 것도 반환하지 않습니다. 예를 들어 다음과 같습니다. "http://www.nytimes.com/2016/07/24/travel/mozart-vienna.html?_r=0" URL을 수동으로 확인하면 내용을 볼 수 있으며 원본을 보더라도 페이지 구조간에 특별한 차이가 없음을 알 수 있습니다. 그러나 나는 아직도이 url을 위해 아무것도 얻지 않는다.왜 내 Java 코드가 일부 URL (웹 페이지)의 컨텐츠를 가져올 수 있습니까?

권한 문제 또는 웹 페이지 또는 Java 코드의 구조와 관련이 있습니까?

여기 내 코드입니다 :

import java.io.BufferedReader; 
import java.io.IOException; 
import java.io.InputStreamReader; 
import java.net.URL; 

public class TestJsoup { 
    public static void main(String[] args) { 
    System.out.println(getUrlParagraphs("http://www.nytimes.com/2016/07/24/travel/mozart-vienna.html?_r=0")); 
} 

public static String getUrlParagraphs (String url) { 
try { 
    URL urlContent = new URL(url); 
    BufferedReader in = new BufferedReader(new InputStreamReader(urlContent.openStream())); 
    String line; 
    StringBuffer html = new StringBuffer(); 
    while ((line = in.readLine()) != null) { 
    html.append(line); 
    System.out.println("Test"); 
    } 
    in.close(); 
    System.out.println(html.toString()); 
    return html.toString(); 
} catch (IOException e) { 
    e.printStackTrace(); 
} 
return null; 
} 
} 

답변

0

두 번째 리디렉션, 당신은 리디렉션을 수행하지 마십시오 때문입니다.

curl -v로 접근 시도 :

$ curl -v 'http://www.nytimes.com/2016/07/24/travel/mozart-vienna.html?_r=0' 
* Hostname was NOT found in DNS cache 
* Trying 170.149.161.130... 
* Connected to www.nytimes.com (170.149.161.130) port 80 (#0) 
> GET /2016/07/24/travel/mozart-vienna.html?_r=0 HTTP/1.1 
> User-Agent: curl/7.35.0 
> Host: www.nytimes.com 
> Accept: */* 
> 
< HTTP/1.1 303 See Other 
* Server Varnish is not blacklisted 
< Server: Varnish 
< Location: http://www.nytimes.com/glogin?URI=http%3A%2F%2Fwww.nytimes.com%2F2016%2F07%2F24%2Ftravel%2Fmozart-vienna.html%3F_r%3D1 
< Accept-Ranges: bytes 
< Date: Thu, 04 Aug 2016 08:45:53 GMT 
< Age: 0 
< X-API-Version: 5-0 
< X-PageType: article 
< Connection: close 
< X-Frame-Options: DENY 
< Set-Cookie: RMID=007f0101714857a300c1000d;Path=/; Domain=.nytimes.com;Expires=Fri, 04 Aug 2017 08:45:53 UTC 
< 
* Closing connection 0 

당신은 아무 내용이없는 볼 수 있고,이 3XX 리턴 코드입니다 및 Location: 헤더를 가지고있다.

+0

감사합니다! 당신 말이 맞아요! 리디렉션 된 URL이고 브라우저에서 리디렉션 된 URL을 열고 싶을 때 사용자 이름과 비밀번호를 입력해야만 페이지를 볼 수 있습니다. 알다시피, 어떻게 내 자바 코드에서 리디렉션 된 코드를 얻을 수 있지만 "사용자, 암호"단계를 전달하고 내용을 얻는 방법을 모르겠습니다. 그 생각을 알아? 내 사용자를 추가하고 리디렉션 된 링크로 전달할 수 있습니까?! – Simone

0

안녕하세요, 문제가 URL에, 나는 내 컴퓨터에 당신의 코드를 시도하고는 null를 돌려,하지만 난 그것에 대해 오라클 문서를 읽고 문제가 호스트 것을 발견, 그래서 당신은을 변경하는 경우 URL (예 :이 게시물 링크) 제대로 작동합니다. 내 코드는 여기

package sd.nctr.majid; 
import java.io.BufferedReader; 
import java.io.IOException; 
import java.io.InputStreamReader; 
import java.net.URL; 

public class Program { 

    public static void main(String[] args) { 
     System.out.println(getUrlParagraphs("http://stackoverflow.com/questions/4328711/read-url-to-string-in-few-lines-of-java-code")); 

    } 

    public static String getUrlParagraphs (String url) { 
     try { 
      URL urlContent = new URL(url); 
      BufferedReader in = new BufferedReader(new InputStreamReader(urlContent.openStream())); 
      String line; 
      StringBuffer html = new StringBuffer(); 
      while ((line = in.readLine()) != null) { 
      html.append(line); 
      System.out.println("Test"); 
      } 
      in.close(); 
      System.out.println(html.toString()); 
      return html.toString(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
     return null; 
     } 
}