0

我正在尝试从谷歌返回的页面列表中检索一些 html 文本。它们中的大多数都可以正常工作,但是对于诸如https://www.google.com/patents/US6034687之类的 URL,总是会出现 401 错误,请参见下文

Server returned HTTP response code: 401 for URL: https://www.google.com/patents/US6034687

我正在使用 java,我确实查看了这个错误代码,它似乎与身份验证有关,但这种 URL 可以从任何浏览器访问,而无需要求登录。所以我很困惑,为什么只有这种 URL 对我不起作用。这是我检索 html 的代码

URL u=new URL(url);
    StringBuilder html =new StringBuilder();
     HttpURLConnection conn = (HttpURLConnection) u.openConnection();
        conn.setRequestMethod("GET");
        conn.setRequestProperty("Accept", "text/html");
        BufferedReader br;
        try {
            br = new BufferedReader(new InputStreamReader((conn.getInputStream())));

        String out="";
        while ((out= br.readLine()) != null) {
        //   System.out.println(out);
             html.append(out+"\n");
        }
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

任何的想法?

谢谢

4

2 回答 2

2

尝试在请求中发送 User-Agent 标头。401状态具有误导性。一些服务器不允许来自非浏览器客户端的请求。

conn.setRequestProperty("User-Agent", "Mozilla/5.0 (Windows NT 5.2; rv:21.0) Gecko/20100101 Firefox/21.0");

顺便说一句,当您为https方案执行 openConnection() 时,返回值是HttpsURLConnection,它扩展了HttpURLConnection

于 2013-06-26T04:34:30.297 回答
0

该请求需要用户身份验证。响应必须包含一个 WWW-Authenticate 头字段,该字段包含适用于所请求资源的质询。客户端可以使用合适的授权头域重复请求。如果请求已包含授权凭证,则 401 响应表示已拒绝对这些凭证的授权。如果 401 响应包含与先前响应相同的质询,并且用户代理已经尝试了至少一次身份验证,则应该向用户呈现响应中给出的实体,因为该实体可能包含相关的诊断信息。HTTP 访问认证在“HTTP Authentication: Basic and Digest Access Authentication

于 2013-06-26T04:27:34.860 回答