2016-08-04 2 views
-1

私は自分のJavaコードを使っていくつかの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

秒1は、リダイレクト、およびあなたがリダイレクトに従うことをしようとしないためです。

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をブラウザで開く場合は、ユーザー名とパスワードを入力してからページを表示する必要があります。私は自分のJavaコードでどのようにリダイレクトされたコードを取得できるのかは知っていますが、 "ユーザー、パスワード"のステップを渡してコンテンツを取得する方法はわかりません。あなたはそれについて何か考えていますか?私は単に私のユーザーを追加し、リダイレクトされたリンクに渡すことはできますか? – Simone

0

こんにちは、 問題は、あなたのURLである、私は私のマシンであなたのコードを試してみましたが、それはまた、nullを返しだが、私はそれについてのOracleドキュメントを読んで、問題がホストであることがわかったので、あなたが変更した場合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; 
     } 
} 
関連する問題