Java中的URL:为什么不考虑“+”之后的String部分?

时间:2015-10-30 20:44:31

标签: java url inputstream

我正在使用URL's,更准确地说是使用Stack Overflow。

网站questions的{​​{1}}部分的结构是:

URLs

尝试使用/questions/tagged/tag+anotherTag+lastTag 时,我只会收到第一个标记的问题。

实施例

URL

输出

URL url = null;
InputStream is = null;
BufferedReader br;
String line;

try{
    url = new URL("https://stackoverflow.com/questions/tagged/cobol+hibernate");
    br = new BufferedReader(new InputStreamReader(url.openStream()));

    while ((line = br.readLine()) != null) {
        if (line.contains("<div class=\"tags")){
            System.out.println(line);
        }
    }
} catch (Exception e){
    e.printStackTrace();
}
System.out.println(url);

预期产出

<div class="tags t-cobol">
<div class="tags t-batch-file t-cobol t-mainframe t-vsam">
<div class="tags t-cobol t-mainframe">
<div class="tags t-cobol t-opencobol t-microfocus">
<div class="tags t-cobol">
https://stackoverflow.com/questions/tagged/cobol+hibernate

实际链接是empty page(从来没有任何问题与两个标签一起发布),正如您所看到的,代码只是查找第一个标记标识的问题。

// Nothing because there is no question under both tags https://stackoverflow.com/questions/tagged/cobol+hibernate 只是一个很好地解释问题的例子,我知道将这两个标签放在一起没有逻辑。

1 个答案:

答案 0 :(得分:2)

这个curl命令和输出有所启发:

$ curl 'http://stackoverflow.com/questions/tagged/cobol+hibernate'
<html><head><title>Object moved</title></head><body>
<h2>Object moved to <a href="/questions/tagged/cobol">here</a>.</h2>
</body></html>

即,重定向请求,删除第二个标记。

也是curl -v ...

输出的摘录
< HTTP/1.1 302 Found
< Cache-Control: private
< Content-Type: text/html; charset=utf-8
< Location: /questions/tagged/cobol

您似乎需要一些代表才能同时搜索多个代码。如果我在隐身窗口(我未登录)中打开http://stackoverflow.com/questions/tagged/cobol+hibernate,则会删除第二个和更多标记。

所以如果你想用Java做这个查询, 您似乎需要以编程方式登录。

我想这是因为搜索多个标签可能会对数据库造成负担,因此其使用仅限于有经验的用户。 您可以在MSE上获得明确的答案。