【问题标题】:Accessing MyAnimeList.net with Java使用 Java 访问 MyAnimeList.net
【发布时间】:2014-02-04 02:03:50
【问题描述】:

我正在尝试使用在此 git https://github.com/Autumn/javaMAL 上找到的以下 Java 代码访问 http://myanimelist.net

String result = "";
        try {
            URL url = new URL(sURL);
            URLConnection urlc = url.openConnection();
            BufferedReader buffer = new BufferedReader(new InputStreamReader(urlc.getInputStream()));
            StringBuilder sb = new StringBuilder();
            String str;
            while ((str = buffer.readLine()) != null) {
                sb.append(str);
            }
            result = sb.toString();

        } catch (Exception e) {
            e.printStackTrace();
        }
        return result;

这是我从网站返回的内容

<html><head><META NAME="ROBOTS" CONTENT="NOINDEX, NOFOLLOW"></head><iframe src="/_Incapsula_Resource?CWUDNSAI=9&incident_id=163000490097146940-336953331276776217&edet=12&cinfo=464f095fc753818104000000" frameborder=0 width="100%" height="100%" marginheight="0px" marginwidth="0px">Request unsuccessful. Incapsula incident ID: 163000490097146940-336953331276776217</iframe></html>

但这不是网站的正确来源。相反,我应该得到这样的东西:

<div id="header">
    <a href="/">MyAnimeList.net</a>
</div>

<div id="menu">

<div id="menu_right">

    <div id="searchBar">

    <input type="text" class="inputtext" id="topSearchText" value="Search" onkeydown="return ts_checkEnter(event);" size="30" /> 
    <select id="topSearchValue" class="inputtext" onchange="ts_selection();">
    <option value="0">Anime</option>
    <option value="1">Manga</option>
    <option value="2">Characters</option>
    <option value="6">People</option>
    <option value="3">Fansub Groups</option>
    <option value="4">Clubs</option>
    <option value="5">Users</option>
    </select>

    <input type="image" src="http://cdn.myanimelist.net/images/magnify.gif" value="Search" onclick="ts_subSearch(5);" />

    </div>

</div>

<div id="menu_left">
    <ul id="nav">
                    <li class="small"><a href="/anime.php">Anime</a>
            <ul class="wider">
                                    <li><a href="/reviews.php?t=anime">Reviews</a></li>
                <li><a href="/recommendations.php?s=recentrecs&t=anime">Recommendations</a></li>
                <li><a href="/topanime.php">Top Anime</a></li>
                <li><a href="/fansub-groups.php">Fansub Groups</a></li>
            </ul>
        </li>
        <li class="small"><a href="/manga.php">Manga</a>
            <ul class="wider">
                                    <li><a href="/reviews.php?t=manga">Reviews</a></li>
                <li><a href="/recommendations.php?s=recentrecs&t=manga">Recommendations</a></li>
                <li><a href="/topmanga.php">Top Manga</a></li>
            </ul>
        </li>
        <li><a href="#">Community</a>
            <ul>
                <li><a href="/forum/">Forums</a></li>
                <li><a href="/clubs.php">Clubs</a></li>
                <li><a href="/blog.php">Blogs</a></li>
                <li><a href="/users.php">Users</a></li>
                <li><a href="/about.php?go=team">Staff</a></li>
                <li><a href="/about.php?go=support">Help</a></li>
            </ul>
        </li>
        <li class="medium"><a href="#">Industry</a>
            <ul class="wide">
                <li><a href="/people.php">People</a></li>
                <li><a href="/character.php">Characters</a></li>
                <li><a href="/news.php">News</a></li>
                <li><a href="/favorites.php">Top Favorites</a></li>
            </ul>
        </li>

        <li class="tiny"><a href="/register.php">Join</a></li>
        <li class="smaller"><a href="/ajaxtb.php?login" id="malLogin">Login</a></li>
                    </ul>
</div>
</div>

(我使用查看页面源功能从谷歌浏览器复制)

由于某种原因,我似乎被识别为机器人,但使用 git https://github.com/Autumn/javaMAL 的其他人似乎没有这个问题。谁能解释一下出了什么问题以及我该如何解决?

编辑:我尝试使用演示 JavaFX 浏览器打开它,它工作正常,但我尝试在我的程序中使用 JEditorPane,但它不起作用......(获得与我的代码相同的代码)。 ..

【问题讨论】:

    标签: java url networking connection


    【解决方案1】:

    我使用MyAnimeList API 进行访问。

    它需要用户名和密码(this question 可能会有所帮助),因此您需要编写类似以下内容:

    URL url = new URL(location);
    java.net.URLConnection connection = url.openConnection();
    String userpass = "username:passwd";
    String basicAuth = "Basic " + javax.xml.bind.DatatypeConverter.printBase64Binary(userpass.getBytes());
    connection.setRequestProperty ("Authorization", basicAuth);
    

    顺便说一句,当我尝试 XML 解析器时,出现了一些 dtd 问题。所以我用jsoup来做解析。

    【讨论】:

      【解决方案2】:

      你得到的是 Incapsula,一种 DDOS 预防措施。 试试这个来解决:

      String result = "";
      try {
          URL url = new URL(sURL);
          URLConnection urlc = url.openConnection();
          urlc.setRequestProperty("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8");
          urlc.setRequestProperty("Accept-Language", "en");
          urlc.setRequestProperty("User-Agent", "Scrapy/0.24.2 (+http://scrapy.org)");
          BufferedReader buffer = new BufferedReader(new InputStreamReader(urlc.getInputStream()));
          StringBuilder sb = new StringBuilder();
          String str;
          while ((str = buffer.readLine()) != null) {
              sb.append(str);
          }
          result = sb.toString();
      
      } catch (Exception e) {
          e.printStackTrace();
      }
      return result;
      

      您可以使用不同的用户代理,尝试http://www.whatsmyuseragent.com/ 找出您当前浏览器的用户代理。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-01-11
        • 2013-03-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-07-19
        相关资源
        最近更新 更多